O comportamento estranho foi devido ao CONNTRACK. O SNAT e o DNAT de fato funcionam bem juntos se nada mais atrapalhar.
Além disso, configurei apenas o SNAT e o DNAT em uma direção. Como há tráfego constantemente passando, a tradução reversa automática do SNAT e da DNAT cuida do caminho de retorno para mim.