I think you understand all the interlocking inheritance and calling here better than I do, but I still feel strongly that a "try...except Exception" should be directly around the call to the router.

Maybe instead of logging it there though, it could wrap it in another exception (RapidBackendError or something) and raise it again. Then the router could catch it anywhere and do what it wanted with it, without hiding any other exceptions.