Let's define
f[x_]:= x ( -x + x^x)
now we have
FunctionDomain[ f[x], x]
(x ∈ Integers && x <= -1) || x > 0
As we can see the both solutions returned by Solve belong to the domain of f[x] however x == 0 does not belong to the domain and so it cannot be a solution. Here the system works correctly however in a similar case it failed in a previous version and still does (at least in version 12.1), see e.g. Wrong solution to a simple equation.
As it has been observed x == 1 is a double root. Let's assume that x > 0 than
f[x] == 0 is equivalent to Log[x] == x Log[x] and so (x - 1) Log[x] == 0 and this equation has a double root at x == 1 since $x-1=0$ and $\ln(x)=0$ for $x=1$.
WARNING!!!
Remarks above concern the case with domain specification in Reduce and Solve e.g. Solve[ f[x] == 0, x, Reals] and Reduce[f[x] == 0, x, Reals] however when we restrict the domain by including appropriate ranges for the variable x both functions i.e. Reduce and Solve fail, e.g.
Solve[ f[x] == 0 && -2 <= Im[x] <= 2 && -6 < Re[x] < 6, x]
Reduce[f[x] == 0 && -2 <= Im[x] <= 2 && -6 < Re[x] < 6, x]

The correct solution x == -1 is lost and a wrong "solution" x == 0 is included.
This is a bug!.
0^0isIndeterminate, but I'm not sure. What's also weird to me is that it duplicates{x -> 1}...how does it count multiplicity here? Usually roots are duplciated for multiplicity reasons, e.g.Solve[x^3 == 0, {x}]gives three copies of{x->0}, but I don't know what's going on here. – thorimur Mar 11 '21 at 22:52