I don't recall too much more in the book about strictness, but it's a great read nonetheless.
The one thing it could do a better job of covering is how types defined with data and newtype differ, and how to use strict fields in data types. It does give an explanation of how to implement NFData in terms of seq, but you can often get away with simply defining strict data types. Some of that is in here, but there isn't a lot of explanation:
http://www.haskell.org/haskellwiki/Performance/Data_types
I honestly don't recall where I picked up all that, it might've just been from reading parts of the Haskell Report or RWH.
I would recommend trying to understand the general case, not to look for specific examples of what not to do because you'll never find them all :) Ultimately it all boils down to following the pattern matching of constructors (since that's what forces evaluation to happen) and you should assume that Haskell is going to be as lazy as it possibly can (ignore what the optimizer *might* do). The special cases are seq, newtype, and strict fields.