I'm sure these developers dabble in other areas but I'm also pretty sure someone will admit to being in one of these distinct categories.
The .Net coders
Not necessarily a ".Net" programmer, but a programmer most at home using APIs to build larger systems. A coder who doesn't care about the underlying implementation but rather that it just works. Not as much technical knowledge required, but probably a higher depth of design philosophies. These are the "business logic" programmers employed throughout the world to get things done.
The Runtime developers
Still a firm grasp of design principals and patterns, but also more focused on some technical details. Questions they have probably asked themselves, "How should I split up a chunk of memory the OS gives me into smaller 'new' and 'malloc' sizes?" Or "How would I implement printf?"
The Kernel developers
These are the crazy ones. Memorizing op-codes from the Intel x86 Instruction Manual or reading up on page table entry structure formats. These developers do need to know about design but also need to have the technical expertise to work right on the bare metal.
I guess I'd like to see job candidates that classify themselves into one of these classes. It's important to understand what they are interested in and what questions to ask. It's also important for the candidate to know so they apply for the right jobs. There's no wrong answer to this question -- the world needs all three types!
It's also important to continually evaluate where you want to be. I definitely think you can change your path.