There are basically three major downsides:
1) It's another at least $399 x 2 as a single developer to use (but you can develop against it for free and only buy the license when you want to deploy). Professional licenses are more expensive than that.
2) The runtime can take a long time to load. 3-5 seconds for some apps. You can create a splash screen to mitigate this, but it's a *t experience when you do an a/b comparison on a native app and a mono app (this time is basically while it loads the runtime).
3) 3rd party library support sucks. It just doesn't really exist; if you're used to pulling nunit, ninject, shouldly, nhibernate, nsubstitute, etc. into your project, forget it. A handful of libraries have been ported to the touch and android runtimes, but most of things you'll look at either won't work or you'll have to recompile manually (to be fair there are a fair few that are easy drop ins; Dapper works like a charm for example).
That said, you get some pretty cool stuff: you can separate your core application logic, including database access into its own library and share the code between your various projects. Fix once, fix everywhere.
You can have common unit tests that you can run on a non-windows server.
It's vastly more productive (than writing two code bases in objective c and java).
You can develop without using visual studio~ <3 (some people see this as a downside; it's not to me. VS2010 is rubbish as far as I'm concerned; it crashes, freezes, loses my work all of the time. For all that I love resharper, I'll take monodevelop in a second thanks).
Overall; if you can afford it, do it.
[1]: http://stackoverflow.com/questions/8223837/using-dapper-in-m...
Porting from WP7 to iOS took a few months, mostly because MonoGame didn't have any 3D support (we added it). We have been slowly porting to Android, it's been pretty good so far, the framework makes it easy and we've had very little issues making external libraries build on MonoDroid. Xamarin's also been very responsive to our questions and issues.
If you want to see what it looks like, here's a video of what we have lined up for our next update coming out in a few days: http://www.youtube.com/watch?v=u5N_ckb-dXw
I find the project to be deeply hurt by being tied to the XNA ecosystem (the content pipeline is a mess, especially as you can't build content stuff in MonoGame itself, and Android support is atrocious--dealing with a destroyed context is insanely messed up). I'm also pretty disappointed in the lack of professional behavior--no CI, few/no automated tests, and few/no code reviews have led to some serious WTFs that sneak in that are really unsettling. There's a lack of project leadership, too, in that if you'd like to contribute there are no real designated maintainers or developers with responsibility over submodules (I've tried myself, multiple times, to no real success).
I think the best way forward for Mono and games would be a library, starting with MonoGame or not, that followed better practices and didn't try to make square pegs fit in round holes. There are a lot of areas where it makes sense for Mono to ape the .NET APIs but this doesn't seem like one of them.
How to guides:
http://www.badlogicgames.com/wordpress/?p=2602
http://www.badlogicgames.com/wordpress/?p=2450
http://www.badlogicgames.com/wordpress/?p=2454
http://www.badlogicgames.com/wordpress/?p=2457
http://www.badlogicgames.com/wordpress/?p=2459
There was also a discussion about using J2objc (http://code.google.com/p/j2objc/) in order to port it to iOS: http://www.badlogicgames.com/wordpress/?p=2593
No Metro support (and I find it very unlikely Microsoft will allow Java apps in their Metro store, and almost definitely not on ARM devices) and a reliance on IKVM on one of the major mobile platforms makes it a poor choice for greenfield development if you care about those platforms.
It's really, really great for desktop and Android, though.
not sure what's wrong with IKVM?
If the project is lacking tests -gasp- that right there is an area you could have contributed.
If the project needs CI, I can tell you, it is not very hard to add. We would be happy to host that.
He achieves anywhere from 69-87% code reuse depending on the platform. They did a bit of a case study a while ago where Frank talks about it - http://blog.xamarin.com/2011/10/26/java-to-ipad-in-2-months/
I met the creators of iCircuit and TouchDraw at MonkeySpace they said it was really easy to get going and you just needed to design your library so the UI was decoupled from the main code-base (which you could effectively re-use as-is). Several of techniques of structuring your code-base was described in @gshackles talk, some of the slides are here:
https://speakerdeck.com/u/gshackles/p/cross-platform-mobile-... (SpeakerDeck seems affected by EC2's outage).
MonoGame (https://github.com/mono/MonoGame) is an implementation of XNA which allowed games like Bastion and Infinite Flight (A C# Flight Simulator) to run cross-platform.