Why is this button only getting triggered when 'mouseover' is true?
Simply use an AND controller:



This is just animating the button. To trigger certain operations there are many options.

Send a message

This way the button does not even care who is processing the command.



The recipient can even reside in a different (but active) scene.



Direct operation

This means the button performs the operation. This creates a tight coupling between button and operation. I suggest to use this only on menu operations (such as switching menus, or closing the overlay scene).

Logic Bricks



Python

There are few ways too. The problem is that you can't connect to the already setup AND controller as there is no Python actuator.

This means you need to recreate the AND controller behavior within your custom brick. 



Sample code:

import bge


def allSensorsPositive():
    for sensor in bge.logic.getCurrentController().sensors:
        if not sensor.positive:
            return False
    return True

if allSensorsPositive():
    print("run your code here")


Remarks

I strongly recommend to separate button presentation from button operation. Otherwise your design will quickly become unnecessary complex.

Debug sensor status

If you do not know the sensor status you can run this script. It will print it to console:

import bge

sensors = bge.logic.getCurrentController().sensors
output = ""
for sensor in sensors:
    output +="'{0}' t:{1:d} p:{2:d} |".format(sensor.name, sensor.triggered, sensor.positive)
print(output) 


Example:

'Mouse' t:0 p:0 |'Mouse over' t:1 p:1 |
'Mouse' t:0 p:0 |'Mouse over' t:1 p:0 |
'Mouse' t:0 p:0 |'Mouse over' t:1 p:1 |
'Mouse' t:0 p:0 |'Mouse over' t:1 p:0 |


It is 


'sensor name' 
t: 0=not triggered, 1=triggered 
p: 0=evaluated nothing, 1=evaluated positive


Obviously at least one sensor must be triggered to get a new output.