I've done embedded work. I could do embedded work, I probably wont because the pay is mostly terrible compared with either traditional software engineering or the more data orientated stuff I usually do.
So, if there is a shortage of embedded engineers, it's because nobody really want to pay them properly. As to moving things up the stack... well that's always been a trend. But someone has to write the board support package and do all the hardware interfacing to the often broken and buggy hardware.