Actually, it's not a bug. y**x, where y is a negative number, is called a discontinuous function -- it is not defined for every value on the real line. For instance, (-4)**2 is well defined (16), but (-4)**(1/2) (e.g. the square root of -4) is unknown.
In Black's case, my guess is that when (-3)**(-3) is rendered, SAS gets the exact value 3, but there is some rounding in the repeated additions in the do-loop, and then the discontinuous nature of using a negative base comes into play. SAS gives an invalid argument error message for the results it could not compute.