In summary, MS Access is a client application and using it as a server application (i.e. pushing records into it over a network) is just unreliable. I can't tell you why the issue is appearing at non busines hours but I do know that MS Access is not a good foundation to build this kind of process on. It is fantastic for client based data entry, and fine as an ETL source, but not good for ETL processing.
Is the SQL Task transfering data from MS Access > MS Access? If so then it is sucking data from MS Access to SQL, then pushing it back into MS Access (2 trips). As MS Access is a file (not server) based database, you just can't be 100% certain about the state of the MDB file.
If you change your process to copy the data into a local table, it will be only one trip for the data, and you can be certain that it will finish before it goes to the next step (because the destination is an actual 'server' based database, not just a file), plus you can replace a load if your ActiveX code.
But still I am not convinced that the table isn't empty anyway. There could be some other failure occuring that is not being reported by MS Access.
Why don't you (for now) add another step in parallel that copies this data into a local table. Then you can see whats in the local SQL table, as compared to whats in the MS Access table when the full process runs.