Esta é uma tradução do meu comentário para uma resposta.
As regras devem ser ajustadas para depender de um MASQUERADE de saída da porta de origem para manipular os pacotes de retorno. Assim, os pacotes de saída devem ser DNAT-ed com a regra que você tem e MASQUERADE-ed com uma regra:
iptables -t nat -A POSTROUTING -p tcp --destination-port $PROXY_PORT -j MASQUERADE --to-ports $TCP_PORT
Use essa regra em vez de sua regra SNAT.
Os pacotes recebidos relativos àqueles que foram MASQUERADE-ed terão suas portas de destino devidamente mapeadas de retorno.
(corrigido de acordo com o comentário)