It looks like I was a to quick with "works for me". It breaks actually in more complicated situations.
I committed various fixes for the problem. slime-pid is now only needed needed for certain communication styles.
M-x slime works now slightly differently. Now we ask whether a new process should be started if there exists already one, even if no prefix argument was given.
SBCL uses native threading and AFAIK Linux threads are actually processes and unix:getpid probably returns just the pid of the thread. At least that's my explanation for the different pids.
Helmut.