暇人なので、調べてみました(笑)
イベントの実行内容を扱うのは、Game_Interpreterクラスです。
コモンイベントの呼び出しメソッドを見てみると、
子インタプリタとして、新しくGame_Interpreterを作成しています。
これがコモンイベントです。
続けて、内容のsetupがされるのですが、
この時に、場所移動などで、マップIDが、イベント起動時と違う場合、
イベントIDは、0(イベントID無し、つまり、初期化)にされてしまいます。
場所移動する前であれば、0にされません。
次に、セルフスイッチの操作メソッドを見てみると、
$game_self_switchesのkeyとして渡されるイベントIDは、
1以上であれば、セルフスイッチが変更されます。
場所移動等でマップIDが変わっているかどうかは、関係ありません。
なので、質問の例で言えば、
イベント内容
・場所移動(別のマップに移動)
・セルフスイッチAをON
コモンイベントを呼び出していないので、イベントIDが0にならず、
ちゃんとONになる。
イベント内容
・場所移動(別のマップに移動)
・コモンイベント(内容はセルフスイッチAをONのみ)
場所移動後にコモンイベント作成をしているため、イベントIDが0になる。
そのため、セルフスイッチの操作が行われず、ONにならない。
イベント内容
・コモンイベント(内容は場所移動の後セルフスイッチAをON)
コモンイベント作成時には、マップIDが変わっていないため、
イベントIDが0にされないので、セルフスイッチがONになる。
という事になります。
マップイベントと、コモンイベントが内部的(スクリプト的)には、
別物として扱われているために起こる現象のようですね。
しぐれんさんの言う通り、コモンイベントが色々なタイミングで呼べるという仕様上、
意図したイベントと別のイベントを誤って操作してしまわないように
なっているのだと思います。