solve() could be doing something like this to filter out the
parametric solution for x given the real assumption on x
>>> x, y = symbols('x y', real=True)
>>> solve(x**2 + y**2, [x, y])
[(-I*y, y), (I*y, y)]
>>> solve(Eq(I*y, re(I*y)), y)
[0]
>>> (I*y).subs(y, 0)
0
I don't know if it would work in more general cases.
Aaron Meurer