Jordan Russell pointed out (bug 3653 comment #20) that in the current implementation, rsync skips deletion if there is any io_error, not just IOERR_GENERAL. My understanding was that IOERR_GENERAL is supposed to trigger that behavior because it indicates that existing source files may be missing from the file list, but other "I/O errors" should not trigger it.
I've committed a fix to the 3.1.0dev git.