They all look perfectly fine to me, you will always see on the originating ping side VS, that it will do source NAT, this does not differ if you ping another VS or any other host.
When you ping another VS you will see the real IP (172.31.196.x) is being NATted to the VS official IP (the 10.10.10.x in above sample) before it leaves the first VS, on entry on the second VS the official IP 10.10.10.y will be destination NATted back to the real IP 172.31.196.y
Let's assume you have these IP's:
VS1 VS2 Host
real IP VS-IP real IP VS-IP IP
172.31.196.101 10.10.10.1 172.31.196.102 10.10.10.2 10.10.10.10
Now we start a ping from VS1 to VS2
Step 1 172.31.196.101 --> 10.10.10.2 from kernel to outbound interface
Step 2 10.10.10.1 --> 10.10.10.2 from interface to 'cable' leaving VS1
Step 3 10.10.10.1 --> 10.10.10.2 from 'cable' to interface entering VS2
Step 4 10.10.10.1 --> 172.31.196.102 from inbound interface to kernel
Now we start a ping from VS1 to Host
Step 1 172.31.196.101 --> 10.10.10.10 from kernel to outbound interface
Step 2 10.10.10.1 --> 10.10.10.10 from interface to 'cable' leaving VS1
Step 3 10.10.10.1 --> 10.10.10.10 from 'cable' to interface entering Host
Step 4 10.10.10.1 --> 10.10.10.10 from inbound interface to kernel
I hope this will make the picture complete and more understandable, when you go to a external host the 4th step will not be NATted.
To make it all even more crazy, when both VS'es would run on the same host you would see that both VS'es have the IP 172.31.196.101 as the VS will use 172.31.196.101 on host 1 and 172.31.196.102 on host 2.
Regards, Maarten