The reason behind that is there was no need to update MSBuild.exe when .NET 3.0 came. In that case reuse the .NET 2 MSBuild is smart.
MSBuild.exe 3.5 introduces many critical updates,
http://blogs.msdn.com/b/msbuild/archive/2007/11/22/msbuild-3-5-orcas-has-now-shipped.aspx
, but the main features are:
-- Multiprocessor support -- currently command line only, just build your solutions with /m switch. Includes a new improved console logger
optimized for multiproc builds
-- Multitargeting support -- use MSBuild 3.5 to build projects targeting .NET 2.0 if you wish; mix targets within a tree or solution
-- Performance improvements. Your should see improvements in full builds, but most especially in incremental builds. We have seen some
larger incremental build scenarios double in speed. On Vista, we see
even bigger improvements, due to SuperFetch. This is all without even
enabling multiproc!
A couple of more minor features
-- ItemDefinitionGroups -- "types" for items.
-- PropertyGroup/ItemGroup inside targets just like outside -- no more unreadable CreateItem/CreateProperty
-- Ability to remove items from lists and modify item metadata during the build -- no more "sloshing" into another list
Therefore, we see .NET 3.5 shipped with a new MSBuild. This also applies .NET 4 and .NET 4.5, where MSBuild received further updates,
http://msdn.microsoft.com/en-us/library/ee240939(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/hh162058.aspx