The reasons you stated are exactly why I decided on electrical engineering instead of computer science, and my alma matter has one of the best CS dept's in the country.
It's incredible how many people think being able to stitch some crap together, likely barely-working and in Java, is a skill set these days. Without understanding the mechanics behind what your code is doing, what's the point? (Speaking of which, I've met "developers" who don't know what a pointer is. WTF?)
Albeit, it's not that often that I need to delve down to (or below) the opcode level, but it's sure nice to know that I can when necessary.