OnMouseOver is a Unity event. NGUI uses OnHover.
Well, it says OnMouseOver on the dropdown, but I guess it does use OnHover on NGUI's UIButtonSound script. Here's how I have the button set up.

The Exit Button script at the moment does nothing, it's simply got an OnClick handler for the button that's not set up.
Looking at it the code, there's always an OnHover event being triggered with the OnClick event, even when the button isn't gaining or losing focus.
As a test, I created a script and attached it to a button (with no other scripts other than the UIImageButton script). The code is as follows:
void OnHover(bool isOver)
{
Debug.Log("Button event OnHover triggered. isOver: " + isOver);
}
void OnPress(bool isPressed)
{
Debug.Log("Button event OnPress triggered. isPressed: " + isPressed);
}
void OnClick()
{
Debug.Log("Button event OnClick triggered.");
}
When run, the program generates the following output:

The first OnHover event is triggered when the mouse moves over the button. Then OnPress is triggered when the mousebutton is pressed down. When the mouse button is released, OnPress is triggered with isPressed now false, OnHover gets called a second time (I think this is the bug), followed by OnClick. Then lastly OnHover is false when the object loses focus.
Knowing how it works I guess it's pretty simple to make a work around, but I think it's still technically a bug?