The way we've traditionally approached this type of thing is to have the polling job (be it an sftp download job or file event; same idea) trigger a separate workflow to process whatever files it sees, or even trigger a separate workflow for each file it sees. (You might want/need to use a prep_process_report or prep_process_filename to figure out what files are present.)
This way, if the sftp job doesn't download anything, you don't kick off the file processing workflow to begin with, so no error notification gets generated. (The sftp job itself might still reflect an error, but you could update that in the postconditions.)