I also saw this issue, gonna be honest I stoped reading these comments since they didn't seem to read the code you posted.
If a player disconnects and reconnects they are given a new userId, this means this error should theoretically only show up if a player joins then a map change happens. (Disconnect/Connect forwards still fire etc). GetClientOfUserId I don't think does an in-game or connecting check since they are still technically 'connected'. In TF2 the server hibernates, meaning if a player joins they would spawn in and then the map would change, meaning the timer could still trigger.
TL;DR: Put the TIMER_FLAG_NO_MAPCHANGE flag on the timer.
I assume this is the issue but you can confirm in the logs and the timestamps of the map change log.