経験上、活性から一気に「非活性を経由して待ちうけに至る」という処理は、
不安定っぽいです。で私はこうしてます。

まずイベントハンドラ内でdeactivate()だけ呼んだ後にタイマを仕掛けます。
次にprocessSystemEvent()のWAKEUP_TIMER_EVENTで、
  そのタイマが発火したら(1000msとか一定時間経過後)、
  もう一度deactivate()してsleep()します。
この時processSystemEvent()がMODE_CHANGE_EVENTを受けたら
  無条件でそのタイマーを止めます。

こうするとprocessSystemEventがパラで呼ばれない限り、
deactive()とsleep()の呼び出しがアプリボタン(MODE_CHANGE_EVENT)で分断されるということはありません。