It happens both in v9&v10. If you try this
a^0
a^0 (1/a)^(3/2)
a^0 (1/a)^(5/2)
Mathematica returns
1
(1/a)^(3/2)
(1/a)^(5/2)
It's trivial. However, check this out
b /: NumericQ[b] = True;
b^0
b^0 (1/b)^(3/2)
b^0 (1/b)^(5/2)
Mathematica gives
b^0
(1/b)^(3/2)
Hold[(1/b)^(5/2) b^0]
If you trace the last two input, you'll get this
{{{1/b,1/b},{{1/2,1/2},3/2,3/2},(1/b)^(3/2)},b^0 (1/b)^(3/2),(1/b)^(3/2) b^0,(1/b)^(3/2)}
{{{1/b,1/b},{{1/2,1/2},5/2,5/2},(1/b)^(5/2)},b^0 (1/b)^(5/2),(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,<<4063>>,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,Sqrt[1/b]/b^2,(1/b)^(5/2) b^0,{Message[$IterationLimit::itlim,4096],{$IterationLimit::itlim,$Off[]},Null},Hold[(1/b)^(5/2) b^0]}
You can find that in the first case, $b^0$ actually goes to 1, this doesn't happen in the last case (and when evaluating b^0 (1/b)^(1/2)).
I guess that since I set b to be a numeric value, b might be 0, then 0^0 is meaningless; Mathematica will keep the input form; but why does b^0 behave different between b^0 (1/b)^(3/2) and b^0 (1/b)^(5/2) or even stranger is why Mathematica vibrate bewteen (1/b)^(5/2) b^0 and Sqrt[1/b]/b^2 in the last case?