The truth of the matter is that Microsoft wants .Net to tie developers to Windows, correct? If that is so, it would seem they'd prefer to keep compatibility with Mono rather than extend and extinguish their competitors.
The reason is simple: every single Mono/.Net developer is a potential Windows developer - but only so long as compatibility is kept. Were they to kill compatibility, a number of these developers would turn to Objective-C or Python or other non-Microsoft technologies - which means they'd lose both money and developers!
Microsoft knows that developers are everything. If their platform has compelling apps, the (paying) users will come.
This is important for two reasons:
1. Each and every Mono developer is a potential Linux developer.
2. If Microsoft ever decides to become tricky, Mono will be strong enough to fork away and live, keeping its cross-platform status and its developers. In that case, Microsoft only stands to lose (both in goodwill and developer base).
A last point is that Mono/.Net fill in a very important ninche: they provide a way for wildly diverse languages to interoperate. Just imagine how awesome it would be would be if Ocaml could use Python libraries or if Python could use Java libraries and so on. Well, this is possible with Mono right now, with F#, IronPython and IKVM respectively - and this is a *huge*.