int型とlong型で同じ数値を比較すると == はtrueを返しますが、Equalsはfalseを返すことがあります。

Console.WriteLine("1 == 1L: {0}", 1 == 1L);
Console.WriteLine("1L == 1: {0}", 1L == 1);
Console.WriteLine("1.Equals(1L): {0}", 1.Equals(1L));
Console.WriteLine("1L.Equals(1): {0}", 1L.Equals(1));

// 出力:
//   1 == 1L: True
//   1L == 1: True
//   1.Equals(1L): False
//   1L.Equals(1): True

値型では基本的に == と Equals は同じだと思っていたのですが、違うのでしょうか?

また、もしEqualsだけ型を厳密に見ていると仮定すると、trueを返すこともあるのが謎です。