Lol yes, I actually figured out a solution, but why it's a solution makes no sense to me.
Setting syncrefresh 0 manually in the game specific ini files corrects this. The problem with this, is that mami.ini already has syncrefresh set to 0. I can find absolutely no other ini files in the load order that would overwrite this setting. It's like GroovyMame is ignoring my changes to mame.ini, I also had to specify keepaspect 0 manually for all my games, and also coin_impulse 15 for my phototransistors to register properly. For some reason setting these in the mame.ini did not work.
I also would have expected to see issues in other games (I've configured about 100 of them so far) if syncrefresh was actually registering 1 by default. Not really sure how to verify what setting I'm getting normally.
Any ideas why this might be happening?