The curly brackets are just a short-hand so Git doesn't have to print the full path twice.
Thus, copy path/{a.txt => b.txt}
is just short for copy path/a.txt => path/b.txt
.
The percentage at the end of those lines tells you how similar the respective second file is to the first one (in this case, they are exactly identical, which is why Git thinks you copied them).
Note also that this has no influence on the commit content, it's just a semantic interpretation that's done purely for output. The commit's content is always an exact snapshot of all tracked files, without saving any meta information like moving or copying.