your list of wants doesn't really include anything that requires, or would want, an RTOS to accomplish.
This is probably true. I have found very few Arduino hobbyists who are doing projects that require a RTOS.
Quite a few users contact me with more professional uses for Arduino. I was just contacted by a Mechanical Engineering student who is doing a senior project. This student is doing experiments where he needs to log data from a number of sensors at several hundred Hz and others at a slower rate. The sensors include strain gauges, an IMU (inertial measurement unit), and pressure gauges. There are also some control functions for the Arduino.
He is using NilRTOS which runs on a 328 and is very small.
Likewise, the interrupt and timers are hardware functions that have very little to do with any RTOS that may or may not be running; they can be thought of as things that occur "outside" of the task structure.
This is absolutely false! A key reason for running a RTOS is to efficiently do I/O involving interrupts. A RTOS allows efficient synchronization of I/O with tasks
Here are some examples that are important for the Mechanical Engineering project.
NilRTOS has a replacement for AnalogRead that saves CPU time by allowing lower priority tasks to run while the ADC is digitizing a value. This replacement starts the ADC conversion then does a wait on a semaphore. This causes a context switch to a lower priority task. When the ADC done interrupt occurs, the ISR signals the semaphore which cause the return from the ISR to be a context switch to the higher priority task which reads the ADC value.
The ADC read in NilRTOS looks like this:
v = nilAnalogRead(pin);
So the user doesn't see the RTOS complexity but about 90 us of CPU time is saved for each ADC read. The standard Arduino analogRead takes about 110 us and most of this time is wasted.
NilRTOS has a similar replacement for the Wire library. The Arduiono Wire library is interrupt driven but Wire just waits
in a busy loop while I2C I/O is done in interrupt routines. The replacement library has the same API as wire.
In addition the we replaced delay() calls in the sensor libraries with RTOS sleep calls. Some pressure sensors take a very long time to digitize. For example the standard Arduino library for the BMP085 Barometric Pressure sensor has a 26 ms delay calls.
It is easy to make an Arduino library RTOS friendly and more efficient with a few macros.
Replace analogRead calls:
#define analogRead(pin) nilAnalogRead(pin);
Replace delay calls:
#define delay(ms) nilSleep(ms)
Use the nil I2C library instead of Wire by including NilTwi.h instead of Wire.h
NilRTOS has a FIFO buffer class that allows easy communication between the high priority sensor read task that runs at several hundred Hz with low jitter and the SD logger task that can have occasional write latencies of over 100 ms.
This has worked well for the ME student and he didn't need to learn about ISRs and other Arduino tricks.