Else will only run if the mouse isn’t over any buttons. If you move the mouse fast enough you can move it from one button to another without being on any resting space.
Anyways it’s not a bug, but is an expected behavior when multiple instances are involved.
There are a few ways you can do it differently so it does what you want. The first is to make a “for each button” event and put your two conditions as sub-events.
Another idea is to just not use else and use an inverted “is over button” condition.
Probably what I’d do is
Every tick
— button: set frame to 0
Mouse is over button
— button: set frame to 1