Standard SpeedButtons can have same behaviour there, because MouseLeave message is not always send to the control.
I will think how this situation may be improved. Also, I can suggest to use newer version of the Delphi.
Thanks for the clarification.
Since it's a legacy application, it's kinda hard to migrate it to a newer Delphi, but changing the TSpeedButtons to TsSpeedButtons does seem to fix the issue.