This is the magic of Eulers. They seem intuitive but it’s all a giant lie. The rotation depends on all three channels even when you think it doesn’t.
Try this. Parent two empties to MoonCentralGear 20. Clear parent and keep transform for each, one at frame 148, one at frame 149, and you’ll see the true transform values-- which are not at all what you keyframed for the gear. Or rather, not what the driver is showing you. (It jumps from 135/0/135 to -44.1/180/44.1)
There’s not a one-to-one correspondence between -180,180 Eulers and actual orientations. There are actually twice as many Eulers as orientations. Blender “cleans” these Eulers so that they exist in a single space that can be mapped one-to-one to orientations.
By telling Blender that you want a transform channel, you’re getting these cleaned values. You can instead tell it you want to drive from your actual, uncleaned transform by driving from a single property, rotation_euler, to get x rotation, rotation_euler for z rotation.
That’s the best solution here, because eventually, you want to input a value like 1800 into your eulers and see it rotate 5 times, and if you’re dealing with these cleaned eulers, that won’t work.
But another solution here would be to split up your transforms so that nothing every rotated in anything other than a single axis. XYZ eulers with 0 Y, 0 Z have the same raw and cleaned values.