I contacted p4merge about this issue and their support was amazing. They pointed me to a Knowledge Base article which solves the issue.
http://answers.perforce.com/articles/KB/2848/
If you call p4merge directly on MacOS you will have this issue and need to close p4merge for every file as you use mergetool in git. However if you follow the instructions then you will launch with their launch stub that works with git seamlessly.
I altered the instructions a little myself and installed their wrapper script in my local ~/bin folder which is first in my path. This way I could name it p4merge instead of myp4merge.sh as they suggest and it would launch instead of the p4merge binary since it is earlier in the path.
===============================================
The link is broken now so here is what I currently have in my configuration.
===============================================
In .gitconfig
[diff]
tool = p4merge
[difftool "p4merge"]
cmd = /Users/gouldner/bin/p4merge \"$LOCAL\" \"$REMOTE\"
[mergetool "merge"]
cmd = /Users/gouldner/bin/p4merge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
~/bin/p4merge contains the following
#!/bin/sh
#This shell wraps p4merge to allow it to work with git without having to close the
#application between each file during mergetool and difftool operations
/Applications/p4merge.app/Contents/Resources/launchp4merge $*