The variable x inside the quantifier is local to the quantifier. It is not the same as the global variable x specified in FindInstance. The statement
Exists[x, x \[Element] Complexes, x^2 + 1 == 0]
does not have any free variables. It is a true sentence, so the input to FindInstance is equivalent to
FindInstance[True, x]. True is satisfied by any value of x, in particular by x->0.
A quantifier variable is bound to the nearest enclosing quantifier. For instance, the formula form below contains four different variables named x, one free, three bound to different quantifiers. Variables specified in the second argument of FindInstance are interpreted as free variables of its first argument.
Thanks Adam, that explains it. It was not appropriate for me to use FindInstance in that way in that case. However it does show that form of Exists in the details for FindInstance, but the example does have free variables. And the Exists page does say that the x variable is localized. It’s connecting a slightly subtle point across pages. It might help if there was a note in the Details section of FindInstance that stated that variables should be free variables in expr but not the localized variable x.
Exists[x, x [Element] Complexes, x^2 + 1 == 0]
evaluates (with some prodding) to True. Then FindInstance[True, x] finds an instance of the variable x that makes True true.