The correct point to catch your unknown errors is the Application_Error
.
Avoid to capture the OnError on your page, and let the system transfer it to the Application_Error because there you have lost the control on the page, so what other you can do if not transfer it to some error page ? - if you try to just reload it you have the problem to be in a close loop that can cause stack overflow.
From my experience I have issue when I try to handle errors using the page OnError
and I use it only when I have to free some global memory, or something like that if an error happens on page.
To give a summary, try to catch all your errors inside a try/catch block, and give a message to your user / or just take care of this issues, but let the unknown errors to the global catcher to log it and fix it. The unknown errors is something that make you lose the real control of your program, and actually you do not know what to do because you do not have predict it - so log it and fix it for the next time
More details about the errors :
How do I make a "generic error" page in my ASP.NET application so that it handles errors triggered when serving that page itself?