TLarch, try this method. I used it in my last game and it works without a problem.
You have to use 3 common events, which I named "Lantern", "Light ON", and "Hero Screen X/Y".
"Lantern", Trigger "None" (called from the inventory)
@>Conditional Branch: Switch [0001: Light ON] == ON
@>Control Switches: [0001: Light ON] = OFF
@>Erase Picture: 1
: Else
@>Control Switches: [0001: Light ON] = ON
@>Show Picture: 1, 'light', Center (Variable [0003][0004]), (100%,100%), 0, Add
: Branch End
"Light ON", Trigger "Parallel", Condition switch [0001: Light ON]
@>Move Picture: 1, @1, Center (Variable[0003][0004]), (300%,300%), 150, Add
@>Wait: 1 frame(s)
"Hero Screen X/Y", Trigger "Parallel", Condition switch [0002: Lantern] (turn on this switch when you receive the lantern)
@>Control Variables: [0003: LanternX] = Player's Screen X
@>Control Variables: [0004: LanternY] = Player's Screen Y
Of course, the switch and variable IDs may be different from yours, but otherwise it should be the same. I put the "control variables" in a separate common event that's always on, which might help fix your problem.