You nearly suggested the solution to your problem when you numbered the steps being taken and where things start to blow up on you.
This is a concurrency / race condition issue where your script is running in one process and the download is occurring in another process [Chrome]. The directory watcher receives a signal that something has changed in the directory [file create/delete], and it figures out what the name of the new file is that's being downloaded. Provided that the download doesn't complete nearly instantaneously, the file name that gets returned as having been created is the "download in progress" name ending in ".crdownload". However, your WinBatch script is every slightly slower, and it is possible for downloads of relatively small files that by the time your script gets around to trying to interact with the file on disk, the download has completed and the file name that the directory watcher gave you no longer exists. In the case of a larger file being downloaded, your script starts to interact with the file that is still being downloaded.
The solution in this case is to always check the name that was given to you by the directory watcher. If it doesn't end in ".crdownload", then you are free to do what you want with the file immediately as it has been completely downloaded and the browser is done with it. If the file name you receive ends in ".crdownload", you need to go into a loop with a short delay testing the existence of the file. As soon as you determine that the file does not exist, truncate the name to remove ".crdownload" from it and then take the result and use that as the name of the file that you are going to process. I don't know if Chrome opens the temporary download file for exclusive access, but if it does, then the FileExist() function's alternate return value of 2 may be of interest. Otherwise, as long as the ".crdownload" file exists, you need to test it by calling IntControl(39, ...) and specify no sharing [P1 = 0] and the open the ".crdownload" file for read-only access. If you get a sharing violation error [that you need to trap & handle], then Chrome still has the file open and is continuing to download it. If you get success, then for some reason the download was aborted and the file is incomplete and you need to delete it rather than process it. If opening it for read returns a file not found error, then in between your test for existence and testing for whether Chrome has it open, the download completed and the file has already been renamed.