I am not certain that I follow, but the gist seems to be that:
You have gone into the settings tab and under phone provisioning, IP address, installed both the internal and external addresses desired. The system should then show the paths used to obtain their respective provisioning paths if located internal or external.
However, when you actually set-up an extension in 3CX and then look at the provisioning tab for that extension, it shows a different IP, that of the NIC card.
This is where I am losing the issue as to me, the first set of IP is simply setting up the path where the extension's provisioning file can be found once created. The second setting where the IP is that of the NIC card is just that, the IP address that will be used by the phone to establish a link with the system over which it will communicate to make and receive calls and to get the provisioning files as well. In practice, the NIC IP will also be the same IP as used for the (local) internal provisioning path unless you have stored the files somewhere else and stated that in the earlier step above.
As you provision phones, and depending on the phone, the system will query you as to the phone's location. It is here that you specify if internal or external and using STUN or the Proxy. Again, the provisioning tab for the extension will show this feature for all phones, so perhaps the issue is somehow in this aspect. However for those that do, I think this is where the system will then, using your selection, determine which provisioning path to populate the phone's internal setting.
You also mention 3CXPhone which implies the softphone client. Can you provide which version of the client as there are two than can be used with V12 of the system. There is V6 which is the standalone version that was in use prior to the V12 release and then there is the new V12 version that also supports the presence and CTI features.