So, is what I've read about gridviews maintaining the DataKeyNames collection in controlstate - which is pushed into viewstate - wrong?
No - I tested it in asp.net 2 and 4 and grid datakeys add to page viewstate regardless of viewstate=false.

I guess this could be considered a flaw but why would you have datakeys if viewstate=false anyway?