Enum.Equals() compares two enumerations for equivalence in both type and value. Thus it is legitimate to use it on two different types of Enum. The == operator, on the other hand, compares the numeric value of the two enums and presupposes that they are of the same type. Your first test fails because Seasons and TestResult are not the same type. The latter one succeeds because they are both based on Enum type - they're just not equivalent. You can get around this if you really need to by two different techniques.
However in advance I will advise that you use these with care as they can cause all sorts of trouble later on. The enums are different types, presumably for a reason. Side-stepping that reason is a problem that begs the question "Why?". If you have an answer for that question that is legitimate, then perhaps what you should really be looking at is refactoring your code to make it unnecessary.
Now, for how to get away with comparing them anyway, I promised two methods. The first is by value. Cast both enumerations to ints and compare them by value, like ((int)s2) == ((int)t);. This is essentially the same as using the operator == except you've removed type from the comparison. The second is by meaning - compare the enumeration itself by converting them both to a string, so s2.ToString().Equals(t.ToString());. This will compare "SPRING" to "PASS", so numeric equivalency is no longer an issue.
If it should be possible to convert your two enums to each other, then perhaps what you should be looking at is explicitly doing the conversion first and then comparing them. In that way, you make your purpose clearer, which will make you a lot happier if you find yourself trying to maintain that code in a couple of years' time. It's more actual work, but it will pay dividends in readability.