You might execute formally verified code within an RTOS, which is your two worlds? Consider you have some critical control loop, like an autopilot (see Ardupilot). That control loop must run at some minimum rate, and the action of the system must be well characterized. Similarly you might want to guarantee that you sample a bunch of sensors frequently enough (so the most recent reading is no older than some time period).
I would suggest that a slightly more approachable way to view an RTOS for MCUs is a library that sits on your bare metal that takes primary responsibility for efficiently dividing up available resources across multiple task functions.
An RTOS will usually provide a well documented SDK with support for memory safe queues, semaphores and message brokering.
Think of it as a software enforced contract + best practices to ensure that you get stable, predictable timing loops without ugly polling and blocking.
For soft real-time, you basically only need low latency.
Threads with priorities, synchronization primitives and some way of handling interrupts is generally considered good enough.
From the description, this sounds like the kind of RTOS that runs most embedded RT applications currently if perhaps a bit heavier in features than the average with filesystem and networking support.
Why would someone make a context switch HIGH latency? That defeats the purpose.
Lots of everyday stuff is running on bare metal code that exceeds so-called "real time" requirements without an OS at all, and those programmers are definitely not rocket scientists! :)