This example you have given already does not require the final case:
type WithEnv[D, R] = D match
case x *: xs => x ?=> WithEnv[xs, R]
case EmptyTuple => R
scala> def foo: WithEnv[Tuple1[Int], String] = i ?=> i.toString
def foo: (Int) ?=> WithEnv[scala.Tuple$package.EmptyTuple.type, String]
Tuple1[T] =!= T for the same reason that List(x) != x.
If it would be the case that Tuple1[T] =:= T, then T <:< Tuple1[T] would also be true (obviously). Since Tuple1[T] <:< Product, that means that T <:< Product for any T, including Any!
Also Tuple2[A, B] would be a subtype of (even equivalent to) Tuple1[Tuple2[A, B]]. That would mean that your WithEnv[(A, B), R] would non-deterministically choose to interpret (A, B) as either
a 2-ary tuple with A and B, resulting in A ?=> B ?=> R, or
a 1-ary tuple with (A, B), resulting in (A, B) ?=> R.
I will let you imagine what more can go wrong from here.