For me this code is working well.
I suppose that you have also several Controls on your Form. If the Mouse hovers over one of this it leaves the Form.
If you want that they also make your Controlbox visible you have to add each Hover-Event from this Controls also to the Form1_MouseHover-Method.
Perhaps you should also look if the Form1_MouseLeave really detect the Leave-Event.
I suggest that you create a method which "knows" that the Mouse is over the Form or one of their controls ...
Here is a easy-made code-sample which works with a Timer which belongs to the Form :
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Dim p As Point = PointToClient(MousePosition)
If (p.X >= 0) And (p.X < Width) And (p.Y >= 0) And (p.Y < Height) Then CheckBox1.Checked = True Else CheckBox1.Checked = False
End Sub
I gave the Timer a small Interval (100 ms) - the only thing you should know is that the Form-Header and the Borders don't belong to the Size-Definition from the Form. The Size of them depends on the selected FormBorderStyle. With this you have to calculate also ...
and another one :
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Dim p As Point = MousePosition
Dim r As Rectangle = Me.ClientRectangle
r.X += Location.X
r.Y += Location.Y
If (p.X >= r.Left) And (p.X <= r.Right) And (p.Y >= r.Top) And (p.Y <= r.Bottom) Then CheckBox1.Checked = True Else CheckBox1.Checked = False
End Sub