First of all, the behavior of NIMH ML that you are talking about is perfectly normal and made it that way by design. You think that you are controlling the task with keyboard and mouse, but, in fact, the keyboard and mouse are tools for subjects to report responses with. So you are actually borrowing them from subjects.
NIMH ML displays visual stimuli both on the subject and control screen so that your Monitor 2 is not necessary, so assume that you don't have Monitor 2. In the simulation mode, you are sitting in front of the control screen (Monitor 1) and playing the role of a subject for a testing purpose, so the responses you are making are interpreted in terms of the control screen's dimensions. When the simulation mode is off, however, the task is supposed to be performed by a real subject who is looking at the subject screen (Monitor 3), so the units of measurement, like visual degrees, should be based on the subject screen's dimensions.
With the simulation mode off, mouse_position() returns visual degrees from the subject's viewpoint. To get the degree positions from the experimenter's viewpoint, you need to get raw xy positions of the mouse cursor and convert them to degrees yourself. Update your NIMH ML to use the following code, since the previous versions do not accept the 'raw' argument in mouse_position().
mouse_position % visual degrees from the subject's viewpoint
EyeCal.control2deg(mouse_position('raw')) % visual degrees from the experimenter's viewpoint
For more information about coordinate conversions, see the link below.
https://monkeylogic.nimh.nih.gov/board/read.php?2,37,37#msg-37