try using instead of dt -> a fixed value 0.1 or 0.2
dt is frame rate dependent which may go up or down based on device it runs and how intensive is the game.
that means it wont add only 0.1 but can also add 0.12 or 0.112341 or 2.123 which will surpass the math your using there...
also another factor would be that tempo is changing everytick and there is not enough time for the bellow conditions to happen, since by the time they are triggered tempo is already changed.
see if you add to tempo every dt or 0.025 what happens. as a second solution.
P.S when you say long run what that means, time frame i mean? i played for about 1 minute (painful 1 minute cause i cant predict the cars coming in which after 5 -6 hits you die and game resets) everything looks ok here.