A script is run in a subshell, which means it has its own $PWD. Once it exits you get the "old" $PWD. If you want to keep the $PWD you need to source (aka. .) the script instead of running it. This won't work in a Makefile, however, because each command is run in a separate subshell:
$ pwd
/home/user
$ cat test.sh
cd /
$ cat Makefile
test:
. ./test.sh && pwd
pwd
$ make test
. ./test.sh && pwd
/
pwd
/home/user