On the other hand, I
believe I am receiving the correct amount of button_pressed
events.

The events generated in CSPI is not reliable as compared to the pyatspi. If possible, I recommend to use pyatspi. Also another advantage will be, when we move to DBus from CORBA, as of now we don't have CSPI for DBus based implementation.