man iptables:
nat This table is consulted when a packet that creates
a new connection is encountered.
так вот, для tcp, каждый коннекшен начинается с пакета с syn флагом, так что это сразу отслеживается
а в icmp как такового коннекшена нет, и просто N пакетов с одинаковым адресом источника и цели, между прохождением которых время меньше некого таймаута, рассматриваются как один "коннекшен"
так что когда ты поставил SNAT, и пытаешся пинговать адрес, который ты пинговал без ната 10 секунд назад, то твои пакеты считаются частью предыдущего соединения, и даже не попадают в таблицу nat.
а вот если пропингуешь другой адрес, который ты не трогал, то все будет ок