Oops, I forgot to include an important line from my current solution. After my "special recovery code", I'm having to do $c->error(0) to clear the Catalyst errors and avoid the exception page.