Ok, *this* works just fine:

data Hand = HighCard {cards :: [Card]}
          | PairOf {rank1 :: Rank, cards :: [Card]}
          | TwoPair {rank1, rank2 ::Rank, cards :: [Card]}
          | ThreeOfAKind {rank1 :: Rank, cards :: [Card]}
          | Straight {cards :: [Card]}
          | Flush {cards :: [Card]}
          | FullHouse {rank1, rank2 :: Rank, cards :: [Card]}
          | FourOfAKind {rank1 :: Rank, cards :: [Card]}
          | StraightFlush {cards :: [Card]}
            deriving (Show, Eq, Ord)

The derived order is actually correct - providing, again, that the hands are well-formed (which the unshown constructor makeHand :: [Cards] -> Hand insures). The only writeup I could find for deriving Ord for datatypes was the report. Anyone got a better pointer to one?