1. One problem may be that you are calling route[RELAY] from your failure route and using sl_send_reply(). The route[RELAY] is still being invoked in a failure route execution context, even if you have managed to contextually invoke another route, or subroutine if you will. Stateless replies (sl_reply_error()) cannot be sent from within a failure route.
2. Yes. throw an append_branch() into your failure route.