I once recommended a coworker ran FXCop on a solution where he was getting an OutOfMemoryException. He then followed its advice on calling Dispose as appropriate and the problem was fixed.
I'm not saying that will fix the issue in your case, but it may. In his case it was event handlers not being unregistered. Calling Dispose on an object he was using caused the event handlers to be properly unregistered and the problem went away.
If you want to spend money on a profiler, I recommend JetBrains dotTrace. As of version 3.1, it has a feature that will help you a lot (though too will FXCop, which is free):
dotTrace 3.1 gives you another means
for spotting memory leaks — finalized
objects. You can now see all objects
that were deleted by the finalizer and
not properly disposed of in the code
of your application.