Since several version (some of the last releasted for the 2.x and all of the 3.x) it is impossible to use the Diff/Merge tools, at least with BeyondCompare.
The problem is that when SourceTree creates the process, it apparently does NOT substitute the $LOCAL, $REMOTE, $BASE, $MERGED variables for the correct filenames, thus the process gets created with incorrect parameters, something like this:
Note the $LOCAL and $REMOTE parameters on the created process.
This example is for a diff call. SourceTree appends the correct filenames to the process, but leaves the variables in place, which doesn't work for the tool. For diff it is possible to workaround the issue: deleting the parameters from the Diff configuration works. But for merge, which needs more data/parameters it is not possible to workaround it like this.
This happens not only with the "BeyondCompare" option, but also with the Custom one. I haven't tried others, but if the Custom one fails I am guessing it will fail for all of them.
I have tried removing the \", the backslash, and the " characters and it doesn't matter, the $VARIABLE is not being replaced.
I have tried in the two computers I have at hand and some virtual ones and the same happens. I have updated, uninstalled and then reinstalled, and so on, and it's always the same result.