In general, the GPL states that you can use non-GPL licensed code in your GPL-licensed product provided that the non-GPL license does not impose more restrictions than the GPL. In other words, you can freely use 3-clause-BSD-licensed code in your GPL project. This doesn't change the license of the BSD-licensed code - the GPL is viral only to code that uses GPL-licensed code, not to code that is used by GPL-licensed code (that would be unreasonable and in general impossible). On the other hand, the 4-clause-BSD license contains an additional clause about advertising, which doesn't exist in the GPL, and so is incompatible.
I see two candidates for the offending clauses in the Ms-PL. One is 3c, which requires the preservation of not only copyright notices (that's pretty much universal across licenses), but also patent, trademark and attribution notices. The other is the second part of 3d, which imposes a restriction on the compiled form of the code that is not there in this form in the GPL. But IANAL, so I'm not sure about this.
Note also that the Ms-PL contains a patent provision similar to that of the Apache License, which makes it incompatible with the GPLv2, but not the GPLv3 (which added similar wording of its own). See the description on GNU's website: http://www.gnu.org/licenses/license-list.html#apache2