So you try and pipe it into 'cp --sparse=always' and you find that it can't read from stdin natively.
Then you scratch your head for several months. Or search the internet for 'sparsifiers' - with little success.
And finally you stumble across the answer, which was staring you in the face all along.
zcat -f "$in" | cp --sparse=always /dev/stdin "$out"
I offer this to the Google gods in the hope that others find it faster than I did.