When S!=B is enabled, base_do_compile does a simple existence check for Makefile and determines that the file doesn't exist. It appears to be doing this test in $S and failing when B!=S, so the do_install task is when the compilation actually happens.
base_do_compile runs in ${B} by default so I think its correct. pulseaudio does a "cd ${S}" in its do_compile_prepend which breaks it specifically. Is this being seen in any other recipe than pulseaudio?
Okay, idiot Ross looked in the .inc and wasn't expecting there to be logic in the .bb. As far as I'm aware this isn't seen in other recipes, I was clearly being over-eager.
Fixed in master http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=ae353c229cfe7e82588dc53fbed10c6ba8370d26