In what cases would one need to use embedded linux or a kernel on a microcontroller?
Generally you wouldn't use a operating system on something that is performing true microcontroller tasks.  In such cases, the OS gets in the way more than it helps.  OSs are about virtualizing hardware resources and providing abstractions like threads and processes.  These things are of little use when the hardware you are driving is easy to control directly, there is no issue of portability, and isn't the kind of thing OSs virtualize for you anyway.  General purpose OSs also don't handle real time requirements well, or at all, and that is something often important in true controller applications.

The reason you do sometimes see operating systems on high end microcontrollers is because those processors are really being used as embedded computers, not really controllers.  When you want to connect to a standard keyboard, mouse, drive a standard display, connect to a network, be a USB host, store files in a arbitrary tree structure, or do any of the other things OSs are intended to help with, then a OS can be helpful.