I don't know Beyond Compare that well, but I'll give it a try :
When you run the external diff the first time, it launches BC. The second time, it launches a new BC process, which find the previous one, so it sends a message to the first instance, then quits.
When you click on external diff in gitk, it creates temp files, run the given command, wait for the program to exit, then delete temp files. When you already have an instance of BC, the second one quits almost instantly, so you can't find them.
That's the best I can do - Try digging BC's manual and forums.