The list there you have roughly corresponds to my intuitions, except for a few minor things:
1. Functional dependencies. --- I personally have used functional dependencies and wrestled with things like the coverage condition, and while I know I could easily look it up and would have no trouble understanding it, I doubt I could tell you what each of those is without looking it up. But I've never felt that knowing that is really worthwhile - they're just things the compiler will complain about if I run into them accidentally, and most programmers who have written enough of their own instances probably get them right anyways. So I'm not really sure that understanding those is necessary for being productive on a day-to-day basis, and they seem a bit out of place on that list. Do you have a particular reason they're there?
2. Arrows -- I've been programming Haskell for a few years now, and only run in to arrows
in practice a few times. I've definitely seen a few libraries migrating away from arrows towards applicative or monadic interfaces instead. Do you use them often? I definitely feel like they're a bit more on the esoteric side, while GADTs, free monads, lenses, type families, and existential data types are things I encounter fairly frequently. On the other hand, they seem to be a good model for FRP and such, so maybe not. (Same goes for church encodings, but that's just a nice bit of CS that people should know a bit :) )
On the whole, looks like a pretty good list that I agree with. Of course, the "basic" list really includes a bunch more - knowledge of data types, syntax, functions, laziness, etc.