I ended up extending the TSpeedButton as such, worked beautifully:

[pascal][background=#FFFFFF][comment=#8080FF][normal=#000080]
[number=#C00000][reserved=#000000][string=#00C000]
unit ExtSpeedButton;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Buttons;

type
TExtSpeedButton = class(Buttons.TSpeedButton)
private
protected
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
procedure DoMouseEnter; virtual;
procedure DoMouseLeave; virtual;
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
public
published
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Custom Component', [TExtSpeedButton]);
end;

procedure TExtSpeedButton.DoMouseEnter;
begin
if Assigned(OnMouseEnter) then OnMouseEnter(Self);
end;

procedure TExtSpeedButton.DoMouseLeave;
begin
if Assigned(OnMouseLeave) then OnMouseLeave(Self);
end;

procedure TExtSpeedButton.CMMouseEnter(var Msg: TMessage);
begin
inherited;
DoMouseEnter;
end;

procedure TExtSpeedButton.CMMouseLeave(var Msg: TMessage);
begin
inherited;
DoMouseLeave;
end;

end.
[/pascal]