I might have found out what's been going on, and for a change it's not me doing anything daft (apart from my choice of disk format.. read on).
The disk had no slack space, the partition filled the disk.
I did a file count on the source disk and the (full) destination, there weren't any duplicate or rogue files, just fewer files on the destination as it had filled up before the copy had completed.
The NTFS disk I was copying from, and the ext4 disk I was copying to, were not only exactly the same size, they were the same model of Seagate disk.
Remember :
"disk1" (XFS) => "disk2" (NTFS) => "disk1" (now ext4)
disk1 to disk2 copy worked without problems, and I had about 500Mb free on the NTFS destination afterwards.
disk2 to disk1 copy then failed as the destination became full before the copy had completed.
I repartitioned disk1, and reformatted it ext4 once more. Looking at the free block count, I noticed it was lower than the free blocks I'd noted when the disk was previously formatted with xfs. Suspicious, I then reformatted with xfs (once I'd worked out how to add xfs tools support to a raspberry pi).
And lo! I now have more free blocks. Many more than when it was ext4, and a few more than it's original xfs format, no doubt due to it also having other (small) partitions then as well.
The proof of it all will be if the copy I'm now doing completes ok, I probably won't know until the morning.
Assuming it works, it would seem that ext4 is less efficient at it's disk usage than xfs or NTFS.
I have subsequently read that xfs is often chosen for NAS servers where you have relatively few files of fairly large size, which is my case here.
Ian