取り敢えずアクティブなコントロールについては、ActiveControl が ContainerControl の場合その ActiveControl を再帰的に探すようにすればいいでしょう。
static Control FindActiveControl(Control ctrl) {
ContainerControl container = ctrl as ContainerContrl;
return (container == null) ? ctrl : FindActiveControl(container.ActiveControl);
}
// Form1 内のメソッドで呼び出す
lastActiveControl = FindActiveControl(this);
本質的な問題の方は分かりませんねー。