When one uses "browser" as object in the Marshal.Release method it errors, saying it's not a type of __COM object.
That's correct. Marshal.Release works on an IntPtr to the IUnknown interface of the COM object which you obtain with Marshal.GetIUnknownForObject.
I'm not very good at COM Interop as I've only used it a few times (and that is few years ago now) and I know nothing of the possible differences between COM and XPCOM so I'm out of ideas now. My last desperate suggestion is to try a call to GC.Collect after Marshal. ReleaseComObject or Marshal.FinalReleaseComObject