I found the problem. I looked closer at the switch where it makes contact and it was very worn at that point, both on the top leaf and the bottom leaf. Being the player 1 fire button, I suppose that isn't a surprise. I swapped the switch with the least worn one in the CP, which was the player 2 start button, which had no visible wear at all, and it works perfectly, 1 shot for each button press, every time.
I don't really know why that worn contact points would cause that issue, since it is still just metal touching metal to close a circuit, but it did. Maybe with the contact points being so worn, it allowed the leaves to contact each other in other areas past the intended contact points, resulting in multiple button presses being registered for a single physical button press.