You're doing a naive copy of a large number of tiny files and measuring the amount of payload transferred. To begin with, every byte transferred requires a read and a write. So that's a 50% cost right there.
But also, the control information for each file has to be read and control information has to be written for each file. In addition, the map of free space available has to be adjusted. That's another 50% cost right there.
But the major problem is simply that the operation is naive. That is, it is not optimized. The operation knows it has thousands of files to transfer and so it could pend dozens of reads for the various files. Similarly, when writing, it could create dozens of files and post writes to all of them. But it doesn't. It just copies the files one by one. That cuts performance by a factor of 10 or so for medium-sized files.
So you should expect about 1/40th of the advertised drive speeds.
For very tiny files, the measurement you are seeing is totally meaningless. After all, you can have zero byte files. And by this measure, no matter how fast you copy them, the speed in payload bytes per second is zero.
So this is not a useful way to benchmark drive performance and isn't even really measuring the speed of the drive but is instead measuring the ratio of useful data to metadata and the efficiency of the copy implementation.