I had a look through the PMD documentation for a rule that catches instances of equals() that will alwyas fail, but couldn't find one, so have had a quick go at writing one.
When using the equals() method to compare objects, it will always return false if the objects are of incompatible types. It would be very difficult to write a rule that caught all bugs of this kind, since it's not easy to tell the run time type of the two objects being compared. However, I think it's feasible if you restrict the set of objects you deal with to the basic types:
Integer, Long, Short, Byte, Float, Double, String
These classes are all final, so if you have a reference to an object of this type, you know it really is of this type, not a subclass. Since they are incompatible types, any attempt to compare two objects of differing types in the list above will always return false.
I'll attach the code I've written and perhaps someone can take a look at it and add it to PMD if it is suitable.