Yes, I see that it's OnPress if I want the pressed button state, but it's the hover that I'm having a problem with. I send the down key to the currently selected button to get it to move to the next button, correct? That's what I see in your code. So I send the down arrow to my button, and it selects the next one, but the hover state isn't triggered, so the user has no idea that it's selected.
Edit: I have a solution. Also I think I didn't clarify what exactly I'm working with. OUYA is an Android device but it has no touch input, only a controller that does not send input through Unity's input manager. I'm using UIKey Navigation on my buttons, which works brilliantly with controllers in the editor but fails on the device.
The problem is that the input scheme was never changed to Controller, so the if statement that triggers OnHover falls through:
if (isEnabled && (!isSelected || UICamera.currentScheme == UICamera.ControlScheme.Controller) && tweenTarget != null)
OnHover(isSelected);
I needed to add a line to set the input to Controller before sending the key codes:
UICamera.currentScheme = UICamera.ControlScheme.Controller;
GameObject selectedObject = UICamera.selectedObject;
UICamera.Notify(selectedObject, "OnKey", KeyCode.UpArrow);
Took a few debug statement to figure this all out. I imagine this isn't a common situation, but hopefully it will help somebody else in the future.