To date, one difficulty with implementing COM interfaces in managed code is that until now there has been know way to debug into QueryInterface. With CLR v4, its now possible to modify your object to trace calls to QueryInterface using the new ICusomQueryInterface interface (see MSDN).
sealed class MyObject : IMyInterface, ICustomQueryInterface
CustomQueryInterfaceResult ICustomQueryInterface.GetInterface(ref Guid iid, out IntPtr ppv)
Debugger.Log(1, "MyObject", "MyObject: QI'ed for " + iid.ToString() + "\n");
ppv = IntPtr.Zero;