I've hesitated to respond further on this thread, but I guess I'll throw another two cents into the pot.
With due respect, I'm a big fan of everything that Joe outlined except the final catch(Exception ex). If a method could handle the exception, then it would be doing so with a more specific catch. The catch is thus inherently unhandlable, and there is no way for the method to return the application to a valid state. An unhandlable exception should be propagated to a handler that DOES know how to handle the specific exception. This makes debugging much, much easier. Hiding exceptions through a general Catch(Exception) makes debugging more difficult. This is (one reason) why FxCop warns warns against such behavior.
Others will make a very reasonable argument that web applications should not fail hard and allow for graceful top-level handling of an unhandled exception. This is fine. But at the framework- and module-level, Catch(Exception) has no place. In fact, there have been a couple instances in DNN where an exception was swallowed via a general handler that significantly added to my debugging time.
There are plenty of reasonable people on both sides of this debate. Both camps have very valid points. Just thought I'd present the other view :)
Brandon