Hello again,
My original post was incorrect. The nat pinging actually works perfectly on restart. It turns my issue was with the "keepalive_timeout" module param in the nathelper module.
For some reason whenever keepalive_timeout is set, when Kamailio is restarted after a few seconds "Expires" is reset to 10 for all contacts. They will get loaded into memory from the db with correct expires and then get reset to 10, and expire after those 10 seconds.. Disabling "keepalive_timeout" fixes the issue, also enabling a second pinger process seems to fix the issue as well.
Figured I post this here in case someone is having a similar issue on 5.3. Not sure if this is a bug or if I'm not understanding something correctly.