I have never had much luck with Marshal.ReleaseComObject by itself. In VS 2003, it was recomended to use Marshal.ReleaseComObject in a loop until your reference count was zero.

Code:
While System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0 End While
VS 2005 now has a method to do the looping for you.

Code:
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(o)
Try using this method for your release.