Boo is a great language to learn on, based on your above criteria. The compiler does its best to get out of your way and it has some really crazy, advanced features like syntactic macros and an extensible compiler pipeline (which don't really apply in the context of this course, but are nice, nonethless).
If you wanted .NET stdlib access (read: not python's crazy stdlibs naming scheme) and static typing with a less-cumbersome syntax (read: c#), then Boo fits that mold pretty well.
As for Mono support, Boo supports it very well. Several of the core developers on the Boo team are loonix users and, as such, are very quick to address build issues that arise as a result of Mono incompatibilities. Also, compared to C#/F#/etc, Boo is a pretty fast moving project in terms of getting changes into the src repo as a traditional Open Source project. This could also be viewed as a drawback, depending on your POV (relative lack of good docs, lots of people are using it but few are actively "pimping" Boo in the community).
But in the criteria spelled out above, I think Boo is a great candidate. It has adequate tooling (SharpDevelop in windows and MonoDevelop in windows/linux/osx) with things like intellisense but is not so entangled in its syntax that you can easily work in a "lower level" approach (vim, etc) if that's your cup of tea.
Plus, unlike C# (but like F#), Boo ships with an interactive shell, booish.exe, which is a valuable exploration/teaching tool.
The one warning I can give about Boo is that you can get into trouble with things like the pervasive compiler inference (it will infer types of locals based on instantiation.. you can skip typing method args (they will be a System.Object, which is a Bad Thing IMO due to boxing (but who cares for an intro class?)), the compiler will try and infer return type if you omit it in the method sig.. so if you have multiple return statements with different types, then your method will be a System.Object, once again.. or that the compiler will stub out unimplemented methods on interfaces that your custom types implement (unlike C# which will cause a build error) .. things like this can get you into trouble if you aren't aware of them and act accordingly.. but these are more issues for application developers and not the problems of students in an introduction to programming languages course.
Best of luck, regardless of which language you pick!