IMHO...
1) Salary. They want to pay little as possible but expect you to know everything inside out. You must know a-z , but don't want to pay at for the skills.
2) I had gone for interviews in the past (bec of restructing) , and they want a C# dev. Passed 2 test that took hours. 3rd test (with the last interview).. "your job will be a SQL developer, writing sql reports etc". I was WTF... you said C# etc.. not SQL dev.
3) Just because they look for someone with specific skill (example .net remoting) and the candidate doesn't have it (but has all others) then the candidate gets rated "not skilled enough"
But agreed. Companies don't invest in people anymore too.
You get mediocre devs too. That is why I hate the "drag/drop" books... because someone reads the books, does a course and now they are a "senior" developer.
edit x2: And all these compatibility Test etc companies want to do these days. So you pass all technical questions etc.. but you "fail" their compatibility test.. creates a "demand".