Hi Brian,
I think you're expecting too much. At least for use cases it's simply not possible to reverse engineer from code. Use case diagrams describe how external actors (human or machine) communicate with the software to achieve certain output or behavior. A single use case may be implemented in a single class, or may need a whole bunch of classes, components or even further external systems for its implementation. So, how should a reverse engineering process extract this kind of information from code??
Use case diagrams and activity diagrams are purposed to analyze what is necessary to fulfill requirements that are defined for your software, before implementation IMHO.
State machines are a bit different, because they belong more to the implementation details description. Anyway, as long the reverse engineering process cannot really decide in general, which structural implementation elements (i.e. classes, operations, ...) map to certain state diagram elements, these also cannot be reverse engineered.
BTW, I think that the main purpose of an UML tool is to help in designing object oriented software before implementation, and not vice versa. Reverse engineering is a useful feature in many situations, but just a feature.
WBR
Günther