I've had the same idea: I believe Arduino would be an excellent basis for teaching real-time software design, all the way from simple unitasked busy-waiting stuff using the Arduino platform, to complex multitasked interrupt-driven applications using a platform like FreeRTOS. Instructors could start small with the Arduino SW and IDE on the Arduino Uno, and migrate to advanced topics related to how commercial embedded product development is done on Arduino Mega and clones. That's basically what I did: learned the AVR architecture on the Uno with Arduino, then got FreeRTOS running on a Freetronics EtherMega (a Arduino Mega clone that has the equivalent of an Ethernet Shield integrated on to the board), then wrote a C++ OO wrapper layer around the FreeRTOS facilities (because that's my own thing: applying C++ and OO to embedded development), then wrote interrupt-driven device drivers for Serial and SPI in C++, and drive it all with a simple unit testing framework to convince myself it all works. I think the Arduino HW is a pretty much idea platform for teaching and learning this kind of stuff.
The FreeRTOS docs, both the reference manual and the introductory user guide are well worth their tiny price. The Atmel reference manual for the specific microcontroller is a must. I have a slew of textbooks on real-time and concurrent programming, but it would take some thought to decide which one would serve best in a specific course.
I've looked at a lot of platforms over the past few years, including an Atmel AT91 (ARM) evaluation board, BeagleBoards (OMAP ARM), etc. I've spent years doing embedded development on ARM processors using Linux, but I just think that Linux and any processor with a memory management unit is just too complicated for introductory courses. You spent too much time dealing with stuff that isn't core to what you are trying to teach.
A link to a tarball of the whole my whole project can be found here:
Recent blog articles I've written on this topic: