Putting it in harsher terms, when a candidate puts a degree on their resume, they are making a claim. Are they claiming that they did just enough to obtain the required marks and no more, or are they claiming to know the material that was taught to them? If it is the latter, then as an employer I am being perfectly fair in testing their claims, whether or not the material has direct relevance to their initial job assignment.

Okay, but earlier in your post, you said:

I know that you learned your stuff in Java instead of in Scheme or--and this would make you instantly unemployable here at BigCo--in Haskell. But they still teach you about recursion.

Now to me, that's a big case-in-point of why the candidate would not really learn recursion. Recursion these days is a 2-week segment in an Intro to Programming sequence, typically taught with trivial examples like, "Take this iterative algorithm and rewrite it to be recursive." The only time recursion would actually seem useful is when used to define a structure like a binary tree, but then again, that might be a lecture or two, followed by, "but all you really need to know is

BinaryTree t();
t.insert(foo);

[or whatever the syntax is] since Java defines a tree in its library."

In other words, the poor student who is taking 4 or 5 other classes in addition to this one receives maybe 2-3 weeks worth of exposure to recursion, learns enough to pass the test, and moves on to the next topic. You really expect this person to be able to whip out recursion at a moment's notice, when he believes that it is just another way to do the same thing?

This part in particular bothered me:

The reason we expect you to know these things is that they were subjects you claim to have studied when you got your Computer Science degree. Don't argue with me

This is exactly the kind of conformist establishment thinking that makes corporate jobs dull and chases away the best minds. A Computer Science degree is largely a formality: perhaps two or three of my classes actually taught me something worthwhile, while most of what I actually learned I picked up on my own. The saying, "Those who can't do, teach," really is quite accurate in the CS field. At my college in particular, what I did in my classes is so far from anything I've done in the real world (i.e. full mathematical specs for every module, etc.) that I feel that most of my classes were basically worthless. The two main exceptions were my honors algorithms/data structures class and my Lisp class, and that was because I had great teachers who really taught me something new. So, as I was saying, getting that degree is largely just a formality for someone who wants to get a job programming. God forbid that student actually be someone who came in with an interest in programming, because multiple courses in Java (and nothing else, in some instances) followed by a corporate job is sure to kill any passion that was there.

So, considering that the degree is only a means to an end,

You tried to optimize your time to spend as little as possible on the things that you thought we wouldn't ask you to know.

and

We know you took shortcuts in school, you did just enough to get through without actually learning anything about the stuff you figured you didn't need to get a job here.

seem like the rational thing for a student these days to do. Someone who simply plods through the work without any thought at all to why may be the stereotypical corporate drone you're looking for, but that is also what makes it necessary to go out and acquire startups in the first place. You summed it up best yourself, though:

Quite honestly, we don't appreciate laziness in someone we are hiring to toil away in the bowels of our enterprise application code.

Count me as glad that I am not working that job. I'd much rather be lazy, write my higher-order code, be as productive as 5-10 of your drones, and reap the majority of the benefits, all while being able to take pride in my accomplishments. Ask for people who don't question the status quo and you're asking for the same people who will spend thoughtless hours writing the same code over and over instead of using abstraction, who will never use their IDEs properly, and who will never bring true innovation to your company.