As Jefromi comments, the question "GIT 2 or more merge conflicts in a single file - how p4merge
handles?" points to a possible cause (status 0 even if conflicts exist)
Wrappers can help debug the situation (see some in this gist).
Checking for conflict maker can help you return a non-0 status, like in this script (for emacs, but you can adapt it for other tool)
# check modified file
if [ ! $(egrep -c '^(<<<<<<<|=======|>>>>>>>|####### Ancestor)' ${_MERGED}) = 0 ]; then
_MERGEDSAVE=$(${_MKTEMP} --tmpdir `${_BASENAME} ${_MERGED}`.XXXXXXXXXX)
${_CP} ${_MERGED} ${_MERGEDSAVE}
echo 1>&2 "Oops! Conflict markers detected in $_MERGED."
echo 1>&2 "Saved your changes to ${_MERGEDSAVE}"
echo 1>&2 "Exiting with code 1."
exit 1
fi