More testing: not just this file, some other file transfers from unrelated places as well - and always at the same places within the file (but different across different files).
Take the tcpdump on both sides - always the same segment of data within each of the file transfers does not make it through the PIX. Take the offending segment and convert it into a small file of its own - this file is impossible to download through, gets dropped.
Needless to say, this all was observable only on that particular setup - not in the lab.
Finally I noticed that the CRC error counter on the inbound interface increments by one every time I try to push through the offending small file.
Replacing the Ethernet cable connecting that interface had solved the problem with all of the "hanging" transfers.
We did not do any further research into the root cause (the user did not want to put back the previous cable), but the working theory was that the initial cable was made bad, but not bad enough to not work at all - and the fault only showed up on particular sequences of data.
Given that neither 10BaseT nor 100BaseT used scrambling, this seemed plausible enough of a theory, but was quite fascinating nonetheless.