The $rs is for incoming SIP reply processing, no relation with tm or dialog module and I would keep it like that.
If event_route[dialog:failed] happens in the context of transmission error and the transaction fails, then you should be able to use $T(reply_code). So it should provide what you look for in this particular case.
Otherwise, event_route[dialog:failed] can be also executed with an internal faked msg, if it happens to be executed when no SIP traffic is handled.
You can eventually add a new attribute for $dlg_ctx():
* https://www.kamailio.org/wiki/cookbooks/5.5.x/pseudovariables#dlg_ctx_attr
And you set its value based on whether a reply was received from the network, transaction failed and value of $T(reply_code) should be used, etc.