Based on what you have written - I think I know what the issue is likley to be (maybe). Its a combination of sparse zvol, spinning disks and thin provisioning causing the disks, over time, to be forever seeking. Whilst the free space is badly fragmented (48%) it (to me) implies that the vhd's are likley badly fragmented as well on the zvol and possibly internally as well
[Warning: This is an educated guess rather than a firm diagnosis]
My suggestion is to ensure that the 2nd server has a non-sparse zvol and then transfer the guests to that, 1 at a time possibly checking each one for internal fragmentation as well and fixing that as well, one at a time. Then rebuild the first server zvol and transfer back, again 1 at a time. Those servers that get a lot of changes should possibly be converted to thick provisioning as well. This may play havoc with your available disk space. Remember that the zvol should be about 50% of the available pool space (which is painful).
Another possible solution, but not cheap, is to use SSD's instead. But that much space, in decent high endurance enterprise SSD's is gonna cost.
I don't get the feeling that anything is fundamentally wrong with the hardware (baring the SLOG size, which would effect writes not reads IF its an actual issue)
Anyone else care to weigh in? Its a lot of work to go through based on my educated guess.