I am just finishing a simultaneous/portable development project. For 4 of my 5 platforms I use Monogame as my render base (my 5th is HTML5 Canvas). You can see my results at http://unseenu.wikispaces.com/AnyGUI.
My experiences are thus:
The Good:
I started with the C#/JSIL version for Canvas since that was the biggest unknown. My first port after that was to OSX and Monogame.
The OSX port went very smoothly. I've already worked with Monogame before so it took me maybe a week to get my render layer ported.
After that it literally took a few hours to get the Windows OGL port running.
It took about 2 days to get the iOS port running. About half of that was dealing with build issues and the iOS tools. The other half was getting touch input working as that was my first mobile platform.
I'm working on Android right now, and its the first place I am seeing what seem to be Monogame portability issues. Clipping seems to be off. Other then that, it was a matter of hours getting it up and again most of that time ws getting the build environment right. Ive needed no code changes. (Though this clipping thing is an pen problem.)
The Bad:
I'm on OSX and the tools can be a bit funky. Biggest issue is that the Monogame support for Xamarin Studio/Monodevelop just doesn't work on the Mac. This is not as big an issue as it sounds though. The templates work all right, what is broken are the library references. So I just downloaded Monogame separately and I change the library References in each project to be those downloaded libraries after I create the project. One I learned to do that, I had few tool problems.
In general, C# handles version control pretty badly. Its very picky about library versions, in part because Microsoft did not want to worry about .NET backwards compatibility.
This shows up in trying to do multi-platform monogame stuff. I've had a lot of grief with that in the past. Even though the monogame API is identical, when you compile code against it that bakes a reference to the particular platform libraries for Monogame into your code. Its not so bad if thats application code, since applications need their own build for each platform anyway, but if you want intermediate libraries it means you need a separate build of each intermediate library for each platform, which is unacceptable.
My solution in this project has been to define my own interface that sits between my game and monogame so I can inject the actual monogame code through dependancy injection t run time. I'll be writing about this eventually on my site in more detail.
The other issue of course is that you need Xamarin Mono for iOS and Android to develop for those platforms and that costs some money.
SO the short answer is this. In general its a good API and the implementations are mostly faithful between platforms. The form it comes in and the tools you need to work with are still a bit rough and can give you some grief. In the end, thats not so different from every other game platform I've ever worked on.