Looks like Cplex tries to do something smart just before it hits a time limit: see the logs in http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14684289&tstart=0#14684289. In there you see that the gap is reduced just before the time limit kicks in, almost independent of the value of the time limit itself.
Above: run with 100 seconds time limit and below: 1000 seconds time limit.
You would almost think it would be beneficial for Cplex to have this end-of-time behavior every now and then.
Note: these runs are on one thread (thus hopefully deterministic – may be apart from the exact iteration number where the time limit kicks in). The statement “The answer to this is an implementational detail: when you use time limits, the solving process becomes non-deterministic close to the end of the time limit.” does not completely satisfy me. I would like to have a better understanding about what is happening here.