If you look at the various data sources , you will see that OSM matches very well with Google's Satellite View.
You can check it with this excellent tool from GeoFabrik. Just mouse over various locations, and you will also see the mouse location on the other map.
http://tools.geofabrik.de/mc/#15/39.9076/116.3929&num=4&mt0=mapnik&mt1=google-map&mt2=bing-map&mt3=google-satellite
But when you check Google Maps, and the Google Satellite View, you will see that they do not match.
http://tools.geofabrik.de/mc/#15/39.9076/116.3929&num=4&mt0=google-hybrid&mt1=google-map&mt2=bing-map&mt3=google-satellite
The best way to observe this, is to open up Google Maps in Hybrid view, where you will see a clear shift between The satellite view and the Roads Layer.
So it is Google Maps, that on purpose are showing incorrect maps.
As to why this is happening, only Google can give you the authentic answer, but my experience says that this must be to meet the statutory requirements of Chinese laws.
A brief reading of The Google forums shows that this issue is well known. For example see these posts:
More reading indicates that this is done because of the laws of China. See these Blog Posts.
Update
I have seen that this offset has been attributed to the fact that China uses some other projection. This is utter nonsense.
There are many countries that have their data in other projections as well as datums other than WGS84. Web maps in these regions appear correct, and show no mismatch.
It is hard for me to believe that organisations such Google, Microsoft(Bing maps), Apple & Nokia (Here maps) are stopped in their tracks by a simple datum transformation or projection transformation, when the code for that is easily available in Repositories such as
Further more, when Chinese services such as Baidu can show a correct map, and Foreign services cannot, it indicates that the issues are not just techincal
