Net::FTP is not magic. Try the same steps using a plain command line FTP client and you'll see that changed timestamps are normal for FTP. Doing a 'put' or 'get' only transfers the file and does not update file time on the receiving end. Plain FTP servers and clients just slap the current time onto the transferred file.
Some FTP servers and clients allow an extension to the MDTM command to allow you to set the remote file's timestamp as a separate step after uploading the file. But if the FTP server is ancient it probably doesn't support that command.
When receiving a file locally you must also get and process the remote directory listing and extract the timestamp to be set. I'm not sure if module File::Listing will help you with the output from dir() but you could look at it.