This is actually a fairly typical problem, with several possible causes.
The motors do not directly drive the axle, there is a gear train hiding inside the plastic casing. That gear train can be deflected without turning the motor.
The software controlling the motor maintains a last known position so that several move blocks can be run in sequence and the over/under at the transition between blocks is taken into account. This is typically a problem when the robot is picked up during an aborted run, and the program is rerun. The robot acts like it remembers the previous run and twitches to the left or right when it is restarted. There is a motor reset block to handle this problem.

Dirt/dust on the wheels can also cause issues, as can wheels not firmly positioned on the hubs. This year we spent a whole session trying to get the robot to go straight and ended up trading wheel/hubs until we found a pair that worked fairly well.
Some wheel/hub combinations slip. We spent a long time thinking some old yellow hub + shiny black wheels would work. What a mistake. The wheels didn't slip at first. After a couple runs that smacked into the wall and they loosened and nothing, not rubber bands, not different hubs, not ...
The big message isn't to find a combination that goes straight. Expect it to wander.