This actually sounds like correct behavior to me because technically, the inner encapsulated packet is not the same packet as the tunnel packet it arrived in. If you follow the new packet flow diagram for v6, then you’ll see that a loop happens whenever decapsulation occurs and then the inner packet is handled as if it had just arrived at the router natively.
I think you’re going to need to start marking based on the remote source IP or something similar.