Messy: when it comes up, catch it (assuming you can?) and drop as much data out to the PAGE as you can. Put it in an HTML comment so the user can't see it. Something like:
lblError.Text = (put the formatted
Exception info here);
< ! -- < asp:label id=lblError /> -->
Almost as messy: look up the Trace.WriteLine kinda stuff. You can enable tracing in ASP.NET which allows you to go to a specific page (_trace.axd?) and get a dump of all the messages for that page load. I've not really used it, but it does work.
A little less messy (as this appears to be a temporary thing): use Trace.WriteLine to output stuff, and run debugview (from microsoft) on the server, if you have physical access. You can then capture this debug output (the core win32 api on this is OutputDebugString - I think the .net call is Debug.WriteLine)
Nicer: Log4Net. Set it up so you can use it anywhere. Put it on "ERROR" most of the time, but in this case, use "DEBUG" until you find the solution.
I'd go for 3, then 4. Or 3 now, and 4 the next time you clean up the codebase a little.
:)