This probably was a bug, the following code works as expected:
object simpleRec extends Poly1 {
implicit def caseInt = at[Int](identity)
implicit def caseList[A](implicit ev: simpleRec.Case[A]) =
at[List[A]](_.headOption.map(simpleRec))
}
Using shapeless_2.11-2.0.0