mmm, at what point do you actually check if these files are there?
What I'd do, because it is a strange problem, is use perl -d to step through your code on the box where the problem appears, maybe set a breakpoint just before the archive is created and at that point check if the files are there and what their size is (or add print/system commands in your source code to debug, depending on your debugging style).
Another thing that might be going wrong when your script generates the files is that the file-content still is in the output buffer instead of on disk. You can set $|=1 to avoid this.
I suspect this has got something todo with the timing of events (are these 2 machines different hardware or do they have a different workload?). The webserver delivery might be done at a time where the archiving/tempfile-creation is not totally finished. I don't know your code and modules you are using, so this is only a guess.
In that case you might also try, as a debugging tool, to add some 'sleep'-commands inbetween the tempfile-creation/archive-creation and delivery via the webserver, and see if that changes the behaviour.
Maybe you could also post the relevant piece of your code, fresh eyes can help a lot.