I do not understand what permits the construction assume(x, "real"). For instance,
sage: assume(x, "real")
sage: bool(x*x>0)
False
I would expect the answer to be True.
Note that Maxima always answers True for the same inequality:
sage: forget()
sage: bool(maxima(x*x>0))
True
I am not sure this is a better behaviour though.