As long as the buttons are out of sight of the motion sensor, you could skip the SimSwitch entirely. Maybe something like this:
Piston 1 (new piston)
IF
Any of Buttons A, B or C changes to on
Then
Set @override = true <-- Global Boolean Variable
END IF
Piston 2 (slight modification of your ‘Motion Sensor’ piston)
IF
Vestibule's motion changes to active
and
@override is false <-- NEW LINE
Then
Turn on light (as normal)
END IF
IF
Vestibule's motion stays inactive for X minutes
Then
Turn off light (as normal)
Set @override = false <-- NEW LINE
END IF
The only time the above code would fail is if someone pressed the button, but then avoided the motion sensor. (Although it would be easy to code in an extra line to account for this, or it will fix itself as soon as someone walks by)