Jeff Richter (author of CLR Via C#) explains why in this article on Safe Thread Synchronization.
Specifically, in that article the section "Why the Great Idea isn't So Great" answers your question.
It's actually a chapter from the book CLR Via C#.
In summary, having a private object as the "synclock" object allows your class to encapsulate and control any locking your class needs. Therefore regardless of how many clients use your class, locking is performed consistently and correctly.