Do you know which SFTP server software is being used at the remote side?
Once the file contents have been transferred, Net::SFTP calls fsetstat in order to also replicate the metadata (permissions and timestamps). But sometimes custom server software does funny things. The truth is that a "No such file or directory" is not an usual error in that context.
You can try also using Net::SFTP::Foreign instead of Net::SFTP, besides being a more feature rich client module, it also offers better debugging.