ProxyAttribute.CreateInstance() から得た proxy

これは、実質的に対象オブジェクトの this であるように振舞う。
InitializeServerObject() を target stub に対して実行すれば、目的の this はきっちり proxy で固定される。

IConstructionCallMessage ctor = msg as IConstructionCallMessage;
if (ctor != null)
{
  RemotingServices.GetRealProxy(this.target).InitServerObject(ctor);
}

この InitServerObject で得られる ReturnValue は実インスタンスとなっていて、このメッセージを Invoke() の戻り値とすると、実インスタンスに対する参照が外に漏れてしまうので ContenxtBoundObject が例外を発するようになる。
this.InitServerObject(ctor) を呼び出した場合との違いとして、作成された ContextBoundObject にたいして GetRealProxy(this) が何を返すかであり、上記の例では System.Runtime.Remoting.Proxies.RemotingProxy が戻るようになる。
理由はわからないが、new の戻り値を MethodLogger の proxy にした場合、this を RemotingProxy の proxy にすると、new で得た参照に関する Invoke() が MethodLogger の Invoke() 呼び出しとして機能するようになる。(ただし、当然だが this に対する呼び出しは機能しない)