I had the lab open and figured I'd take a crack at this.
I get unexpected behavior also, although in a slightly different way. Whether I use
synchronize=no or
synchronize=yes plus a static tie-down route, the 1.2.3.0/24 address does show up in
/routing bgp advertisements for me. All is not well, though, as it shows up with a next hop of 0.0.0.0. This is even with
/routing bgp peer set nexthop-choice=force-self configured. It just ignores it.
Because RouterOS doesn't to my knowledge actually have a way to show you the RIB-IN for a peer, I decided to just modify your otherwise trivial routing filters to just log the prefixes and accept them. When the peer comes up, log messages on the sender capture that both the IPv4 and IPv6 prefixes trigger the tnl-out match and get sent to the peer. On the other side, though, only the IPv6 prefix triggers the tnl-in match and get processed and installed into the table.
Upon further inspection, a packet capture of the BGP TCP session reveals that the UPDATE for the 1.2.3.0/24 NLRI does actually get advertised, including the NEXT_HOP of 0.0.0.0. Whether or not an all zeroes NEXT_HOP field has defined behavior in the RFCs is a level of esoterica that I wasn't able to figure out, but it might make sense that RouterOS would simply discard such an UPDATE as malformed and it would never hit the RIB-IN and consequently never the filters to be logged.
For reference, this is on 6.49.2 stable (two CHRs). What version did you test this on?
Either way, I'm at a bit of a loss and hopefully someone from support notices this or you can start a case and point them here.
Here are the two configs for reference:
[admin@[LAB]routerA] > exp
# dec/15/2021 11:48:52 by RouterOS 6.49.2
# software id =
#
#
#
/interface bridge
add name=loopback0 protocol-mode=none
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
/routing bgp instance
set default as=64512 client-to-client-reflection=no router-id=1.1.1.1
/ip dhcp-client
add disabled=no interface=ether1
/ipv6 address
add address=2a09:affe:cafe:180::1/128 advertise=no interface=loopback0
/ipv6 route
add distance=1 dst-address=2a09:affe:cafe:180::2/128 gateway=fe80::5200:ff:fe0a:0%ether1
/routing bgp network
add network=1.2.3.0/24 synchronize=no
add network=2a0e:affe:cafc::/46 synchronize=no
/routing bgp peer
add address-families=ip,ipv6 in-filter=tnl-in name=routerB nexthop-choice=force-self out-filter=tnl-out remote-address=\
2a09:affe:cafe:180::2
/routing filter
add action=log chain=tnl-in
add action=accept chain=tnl-in
add action=log chain=tnl-out
add action=accept chain=tnl-out
/system identity
set name="[LAB]routerA"
============================================================
[admin@[LAB]routerB] > exp
# dec/15/2021 11:48:55 by RouterOS 6.49.2
# software id =
#
#
#
/interface bridge
add name=loopback0 protocol-mode=none
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
/routing bgp instance
set default as=64512 client-to-client-reflection=no router-id=2.2.2.2
/ip dhcp-client
add disabled=no interface=ether1
/ipv6 address
add address=2a09:affe:cafe:180::2/128 advertise=no interface=loopback0
/ipv6 route
add distance=1 dst-address=2a09:affe:cafe:180::1/128 gateway=fe80::5200:ff:fe09:0%ether1
/routing bgp network
add network=1.2.3.0/24 synchronize=no
add network=2a0e:affe:cafc::/46 synchronize=no
/routing bgp peer
add address-families=ip,ipv6 in-filter=tnl-in name=routerB nexthop-choice=force-self out-filter=tnl-out remote-address=\
2a09:affe:cafe:180::1
/routing filter
add action=log chain=tnl-in
add action=accept chain=tnl-in
add action=log chain=tnl-out
add action=accept chain=tnl-out
/system identity
set name="[LAB]routerB"