You could try ::GetCurrentDirectory() and see if it behaves differently, though I doubt it.
If you are actually interested in the directory in which the executable is installed, as opposed to the current working directory, then _getcwd() is not what you want anyway. In this case you will get the correct path from ::GetModuleFileName().
It seems you misunderstand the notion of a current working directory. That's why you think that GetCurrentDirectory (or _getcwd) has the behavior. They have not. These functions (more precisely, it's GetCurrentDirectory only on Windows because non-standard RTL function _getcwd calls it on Windows) return the correspondent current process property which OS assigned to it at the start. There are lots of methods to set this property. Moreover, the process can reassign its current working directory via SetCurrentDirectory call as desired.
Therefore the current directory of your executable module run does not depend on the module itself. That's why your studies of _getcwd behavior are senseless.