Bruce, thanks for the verbose logging tip. A tremdous help. I figured out what the problem was by doing a side by side comparison of the log for the successful upload vs the log for the failed upload.
The problem was related to the behaviour of the 3rd party SFTP server. A file written to the /to_folder is deleted *immediately* after the file is closed. The exception was happening on the chmod that happens (by default) after file creation during a put() operation. I resolved it by setting the config flag to disable the permission change made after file create:
sftpClient.setConfigFlags(SSHFTPClient.ConfigFlags.DISABLE_CHMOD_AFTER_PUT);
Interestingly, the file was being uploaded despite the exception. I didn't believe it when the tech contact for the third party SFTP server claimed they received the first file. Makes perfect sense now.
Anne