C# 1 is Java minus the Java suck
C# 2 is C# 1 minus much of the C# 1 suck
C# 3 is C# 2 plus a ton of totally cool functional language stuff
C# 4 (not yet released) will have some cool dynamic language stuff
I think codeplex is the right direction, but MS needs to give open source for C# stronger support (instead of ignoring stuff like nUnit).
Another criticism, compared to other languages, is the cruft attached to C#. Like Java, C# is a 'you kinda need to use a heavy IDE to make life easier' language.
As for the IDE dependency complaint, I think this applies more towards some of the standard libraries such as WPF, WinForms, ASPX, ADO.net, etc. I think it is a very valid complaint, but I don't think it is about the language itself.
1) it's always behind the current version of C#
2) even for past versions it still doesn't fully support C#
I'm not sure about this one, but to use mono commercially don't you need to get a paid license for SUSE?