I had experienced really slow copy performance to and from my NAS even on 10GbE. The culprit was small file sizes. Copying, verifying, etc many small files to spinning rust is trouble unless you have a bunch of VDEVs to help spread the load.
I attacked the problem two ways: as much as I could, I consolidated small files into larger archives (ie zip files or sparse bundles on the Mac). Fewer, larger files = faster transfer speed AND faster verification for rsync or like packages.
Once I got rid of most small files, I added a special VDEV (sVDEV) to my pool. HOWEVER, a sVDEV is not the answer to all ills in the world and carries risks that could kill your pool. Do NOT lightly embark on a sVDEV, understand its benefits, settings, and downsides or you will be sorry. But it can significantly speed up small file transfers.
But the first thing is see if you can consolidate all those small files. Apple sparsebundles are especially helpful as you can mount the files as volumes, the archive can be made flexible re size, and crucially, unlike zip files the data is stored in “bands” that are big enough to hold a lot of data but also allow incremental updates that do not require the whole archive to be recopied, just the bands that changed.
There are downsides to sparsebundles (like no built-in bit-rot detection) but that is what I use ZFS to host them on for.