If the traffic has a routing mark, and the ‘active’ route is for a different routing mark, it wont route. You need to add separate routes with different priorities, so in fail over situation marked traffic still matches a route-
Something like this-
/ ip route add dst-address=0.0.0.0/ gateway=10.10.10.1 routing-mark=data distance=1 check-gateway=ping
/ ip route add dst-address=0.0.0.0/ gateway=192.168.10.1 routing-mark=voice distance=1 check-gateway=ping
/ ip route add dst-address=0.0.0.0/ gateway=10.10.10.1 routing-mark=voice distance=2 check-gateway=ping
/ ip route add dst-address=0.0.0.0/ gateway=192.168.10.1 routing-mark=data distance=2 check-gateway=ping
Try setting a correct src-address during ping, you may have some troubles if the packet is not masqueraded, for example.
In other words, the behavior is absurd as you are describing it, so I assume that since you are not disclosing the full picture, there are other reasons for the ping to timeout.
Also, you may want to observe the ping packets with the help of /tool sniffer to see if it actually goes out of the correct interface and in is has a correct src address set.
you should set src-address on ping in case you have multiple ip addresses assigned to the router interfaces. In that case it would select some of the ip addresses and it may be one that is going to break your policy routing rules.