This is the part where I admit to an embarrassing oversight.
I finally traced the bug to a subtle buffering problem. The file being uploaded is not fully written at the time that it is ftp'ed. I never noticed because by the time the ftp is completed and I check the local copy of the file, the buffer has been written to disk. Once I explicitly
close (FH) prior to uploading the file, my
problem goes away.
On the bright side, I learned a lot more about Net::ftp.
Thanks again everyone!
sz