Me autorespondo porque ya me explicaron:
El detalle que se me estaba escapando es que cuando se usa mas de una variable en una lista por compresión, entonces se van a generar todas las combinaciones de ambas listas. En este caso el que sean la misma lista me mareó y creí que se hacia una sola "pasada" por la lista donde x valia siempre lo mismo que y. Cuando aunque sean la misma lista, las iteraciones en cada una de ellas es independiente.