Thanks Jacob!
I think I have found the culprit. The FTP transfer is timing out before the transfer has finished, but instead of giving an error it is saying the transfer is complete when actually it isn't complete! I suspect that is what is corrupting the file...
Thanks for pointing me in the right direction :)