delegateのInvokeとSystem.DelegateのDynamicInvokeだと性能が段違い。
DynamicInvokeはまともにリフレクションを使っている。
control.Invokeは引数がSystem.Delegateというのがポイント。

EventHandlerとMethodInvokerが特別扱いなのはこういう感じなのかと予想している。
void Invoke(Delegate d, object [] args) {
  EventHandler eh = d as EventHandler;
  MethodInvoker mi = d as MethodInvoker;
  if (eh != null) eh(args[0], (EventArgs)args[1]);
  else if (mi != null) mi();
  else d.DynamicInvoke(args);