Trouble with wireguard and asymmetric routing

Thank you so much for your help. Using what you said and also RouterOS blatantly ignores pref-src. Can this really be a bug? - #72 by lurker888 I managed to get it working (or at least it seems to work so far).

For anyone stumbling across this issue in future, this is the configuration I used:

/interface bridge
add name=br-wg1 protocol-mode=none

/ip address
add address=169.254.255.253/30 interface=br-wg1 network=169.254.255.252

/ip firewall mangle
add action=mark-connection chain=prerouting connection-mark=no-mark dst-address=172.21.16.80 dst-port=51822 in-interface=ether9 new-connection-mark=wg1-ether9 protocol=udp
add action=mark-connection chain=prerouting connection-mark=no-mark dst-address=172.21.16.80 dst-port=51822 in-interface=ether10 new-connection-mark=wg1-ether10 protocol=udp

/ip firewall nat
add action=src-nat chain=srcnat comment="Force wireguard from loopback" protocol=udp src-address-list=link_local_addresses src-port=51822 to-addresses=172.21.16.80
add action=dst-nat chain=dstnat comment="Force wg1 clients to internal bridge address" connection-mark=wg1-ether9 to-addresses=169.254.255.253
add action=dst-nat chain=dstnat comment="Force wg1 clients to internal bridge address" connection-mark=wg1-ether10 to-addresses=169.254.255.253
add action=src-nat chain=input comment="Force wg1 clients to reply to address" connection-mark=wg1-ether9 to-addresses=169.254.255.254
add action=src-nat chain=input comment="Force wg1 clients to reply to address" connection-mark=wg1-ether10 to-addresses=169.254.255.254

This configuration survives either one of the links being down as well as a link going down whilst a wireguard peer is connected.