The worse production bugs I have seen involve complicated exception handlers that generated a second exception while trying to write to the filesystem or something. In that case some other exception handler now starts to execute further up the stack. It really is as if a new program is now compiled and installed on your production servers. A new program that has read/write access to the production db. A program that most likely was never executed in QA and has never been seen by any person.
It is a bit hyperbolic but I have never seen an exception handler over four lines long that did not contain a bug.
My attitude towards exceptions is like a fire alarm. If I hear a fire alarm it means one thing and I have one action to take. Any notion of providing different pitched fire alarms to encode information would be absurd and dangerous, that is how I view exception hierarchies.
It is my understands that the Go language from google decided not to include this language feature.
I have heard that Java's checked exceptions are now seen as an important, failed experiment.