It's a flaw in how UIButton works. It caches the "normal" sprite on start, so if you set the sprite to something else at run time, it will revert to its cached normal sprite when you mouseover and hover out.
I'm not sure if you can change the normal sprite from outside, but you can make it not cache at start and cache when it needs to change instead, then it should be fine.
Alternatively, don't use UIButton, but a combination of UIButtonColor and UIEventTrigger instead.