The choice to use a realtime operating system (RTOS) in an embedded system is very subjective. Some developers are more likely to use an RTOS than others would be. This might be because they are familiar with a particular system and very comfortable with implementing it.
The advantages are that many components are already implemented and tested in an RTOS, such as time slicing, semaphores, and shared memory. Once a developer is familiar with the quirks of a particular operating system, it can save a lot of development time. The disadvantages can be higher runtime overhead, both in memory usage and execution speed (although this is not guaranteed).
If a system is extremely complex, an RTOS is likely to be necessary. For simple systems, an RTOS probably makes the source code less readable and therefore less maintainable.