diff --git a/mypy/checkexpr.py b/mypy/checkexpr.py
--- a/mypy/checkexpr.py
+++ b/mypy/checkexpr.py
@@ -2988,20 +2988,14 @@ def visit_comparison_expr(self, e: ComparisonExpr) -> Type:
                 # testCustomEqCheckStrictEquality for an example.
                 if not w.has_new_errors() and operator in ("==", "!="):
                     right_type = self.accept(right)
-                    # We suppress the error if there is a custom __eq__() method on either
-                    # side. User defined (or even standard library) classes can define this
-                    # to return True for comparisons between non-overlapping types.
-                    if not custom_special_method(
-                        left_type, "__eq__"
-                    ) and not custom_special_method(right_type, "__eq__"):
-                        # Also flag non-overlapping literals in situations like:
-                        #    x: Literal['a', 'b']
-                        #    if x == 'c':
-                        #        ...
-                        left_type = try_getting_literal(left_type)
-                        right_type = try_getting_literal(right_type)
-                        if self.dangerous_comparison(left_type, right_type):
-                            self.msg.dangerous_comparison(left_type, right_type, "equality", e)
+                    # Also flag non-overlapping literals in situations like:
+                    #    x: Literal['a', 'b']
+                    #    if x == 'c':
+                    #        ...
+                    left_type = try_getting_literal(left_type)
+                    right_type = try_getting_literal(right_type)
+                    if self.dangerous_comparison(left_type, right_type):
+                        self.msg.dangerous_comparison(left_type, right_type, "equality", e)
 
             elif operator == "is" or operator == "is not":
                 right_type = self.accept(right)  # validate the right operand
@@ -3064,6 +3058,12 @@ def dangerous_comparison(
 
         left, right = get_proper_types((left, right))
 
+        # We suppress the error if there is a custom __eq__() method on either
+        # side. User defined (or even standard library) classes can define this
+        # to return True for comparisons between non-overlapping types.
+        if custom_special_method(left, "__eq__") or custom_special_method(right, "__eq__"):
+            return False
+
         if self.chk.binder.is_unreachable_warning_suppressed():
             # We are inside a function that contains type variables with value restrictions in
             # its signature. In this case we just suppress all strict-equality checks to avoid
@@ -3094,14 +3094,18 @@ def dangerous_comparison(
             return False
         if isinstance(left, Instance) and isinstance(right, Instance):
             # Special case some builtin implementations of AbstractSet.
+            left_name = left.type.fullname
+            right_name = right.type.fullname
             if (
-                left.type.fullname in OVERLAPPING_TYPES_ALLOWLIST
-                and right.type.fullname in OVERLAPPING_TYPES_ALLOWLIST
+                left_name in OVERLAPPING_TYPES_ALLOWLIST
+                and right_name in OVERLAPPING_TYPES_ALLOWLIST
             ):
                 abstract_set = self.chk.lookup_typeinfo("typing.AbstractSet")
                 left = map_instance_to_supertype(left, abstract_set)
                 right = map_instance_to_supertype(right, abstract_set)
-                return not is_overlapping_types(left.args[0], right.args[0])
+                return self.dangerous_comparison(left.args[0], right.args[0])
+            elif left_name in ("builtins.list", "builtins.tuple") and right_name == left_name:
+                return self.dangerous_comparison(left.args[0], right.args[0])
         if isinstance(left, LiteralType) and isinstance(right, LiteralType):
             if isinstance(left.value, bool) and isinstance(right.value, bool):
                 # Comparing different booleans is not dangerous.

diff --git a/test-data/unit/check-expressions.test b/test-data/unit/check-expressions.test
--- a/test-data/unit/check-expressions.test
+++ b/test-data/unit/check-expressions.test
@@ -1985,6 +1985,24 @@ class B:
 A() == B()  # E: Unsupported operand types for == ("A" and "B")
 [builtins fixtures/bool.pyi]
 
+[case testStrictEqualitySequenceAndCustomEq]
+# flags: --strict-equality
+from typing import Tuple
+
+class C: pass
+class D:
+    def __eq__(self, other): return True
+
+a = [C()]
+b = [D()]
+a == b
+b == a
+t1: Tuple[C, ...]
+t2: Tuple[D, ...]
+t1 == t2
+t2 == t1
+[builtins fixtures/bool.pyi]
+
 [case testCustomEqCheckStrictEqualityOKInstance]
 # flags: --strict-equality
 class A:

Strict equality false positive with lists having different item types
This generate a false positive when using `--strict-equality`:
```py
class C: pass
class D:
    def __eq__(self, other): return True

a = [C()]
b = [D()]
C() == D()  # No error
print(a == b)  # error: Non-overlapping equality check (left operand type: "List[C]", right operand type: "List[D]")
```

mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoneAsRvalue mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testChainedCompResTyp mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNonBooleanOr mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testMatMul mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoneAsArgument mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testIs mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testInOperator mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDiv mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testIntLiteral mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testIsNot mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNotInOperator mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testIsRightOperand mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrLiteral mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNonBooleanContainsReturnValue mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testIntDiv mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testReverseBinaryOperator mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testInWithInvalidArgs mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testFloatLiteral mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testMod mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testReverseBinaryOperator2 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testEq mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testReverseBinaryOperator3 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testPow mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testComplexLiteral mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testLtAndGt mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testBinaryOperatorWithAnyRightOperand mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::cmpIgnoredPy3 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testMiscBinaryOperators mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testBytesLiteral mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testReverseComparisonOperator mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testLeAndGe mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testReversibleComparisonWithExtraArgument mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testBooleanAndOr mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testChainedComp mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUnicodeLiteralInPython3 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testErrorContextAndBinaryOperators mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRestrictedTypeAnd mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testChainedCompBoolRes mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRestrictedTypeOr mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testErrorContextAndBinaryOperators2 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAdd mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCastExpressions mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAndOr mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDivmod mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSub mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRestrictedBoolAndOrWithGenerics mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAnyCast mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testTrivialLambda mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUnaryMinus mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testMul mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testVoidLambda mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAssertType mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoneReturnTypeWithExpressions mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUnaryPlus mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoneReturnTypeWithExpressions2 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUnaryNot mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoCrashOnLambdaGenerator mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAssertTypeGeneric mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testGetSlice mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testLambdaAndReachability mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUnaryBitwiseNeg mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSlicingWithInvalidBase mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAssertTypeUncheckedFunction mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSlicingWithNonindexable mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSimpleListComprehension mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testIndexing mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNonIntSliceBounds mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoneSliceBounds mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSimpleListComprehensionNestedTuples mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testIndexingAsLvalue mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAssertTypeUncheckedFunctionWithUntypedCheck mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoneSliceBoundsWithStrictOptional mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSimpleListComprehensionNestedTuples2 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAssertTypeNoPromoteUnion mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testConditionalExpressionStatementNoReturn mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testOverloadedIndexing mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testListComprehensionWithNonDirectMapping mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testOperationsWithNonInstanceTypes mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testErrorInListComprehensionCondition mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoneReturnTypeBasics mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testGeneratorIncompatibleErrorMessage mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testOperatorMethodWithInvalidArgCount mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSimpleConditionalExpression mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testTypeInferenceOfListComprehension mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testNoneReturnTypeWithStatements mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testConditionalExpressionWithEmptyCondition mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testOperatorMethodAsVar mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSimpleListComprehensionInClassBody mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testEllipsis mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testOperatorMethodAsVar2 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testConditionalExpressionWithSubtyping mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSimpleSetComprehension mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testYieldExpression mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testConditionalExpressionAndTypeContext mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testYieldExpressionWithNone mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testIndexedLvalueWithSubtypes mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSimpleDictionaryComprehension mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testConditionalExpressionUnion mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testYieldFromIteratorHasNoValue mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testConditionalExpressionUnionWithAny mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testYieldFromGeneratorHasValue mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictWithoutKeywordArgs mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictionaryComprehensionWithNonDirectMapping mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testYieldFromTupleExpression mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictFromIterableAndStarStarArgs mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSimpleGeneratorExpression mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictFromList mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictWithKeywordArgsOnly mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictFromIterableAndStarStarArgs2 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testOverridingSpecialSignatureInSubclassOfDict mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictFromIterableAndKeywordArg mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRevealType mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testTypingRevealType mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRevealLocals mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUserDefinedClassNamedDict mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictFromIterableAndKeywordArg2 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testTypingExtensionsRevealType mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUndefinedRevealType mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRevealTypeVar mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUserDefinedRevealType mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictFromIterableAndKeywordArg3 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRevealForward mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSpecialSignatureForSubclassOfDict mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testLambdaCheckUnypedContext mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRevealUncheckedFunction mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRevealCheckUntypedDefs mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testSpecialSignatureForSubclassOfDict2 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testEqNone mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testRevealTypedDef mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testTypeAnnotationNeededMultipleAssignment mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testLtNone mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testLambdaTypedContext mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictWithStarExpr mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictWithStarStarExpr mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityEq mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testLambdaUnypedContext mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityIs mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictIncompatibleTypeErrorMessage mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityBytesSpecialUnion mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityContains mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictIncompatibleKeyVerbosity mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityByteArraySpecial mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityOkPromote mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testDictIncompatibleValueVerbosity mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityUnions mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityStrictOptional mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityNoStrictOptional mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityAny mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityBytesSpecial mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityNoPromotePy3 mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCustomEqCheckStrictEqualityTuple mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCustomEqCheckStrictEqualityOKUnion mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCustomEqCheckStrictEqualityMeta mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityEqNoOptionalOverlap mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCustomContainsCheckStrictEquality mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCustomEqCheckStrictEqualityOKInstance mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCustomEqCheckStrictEquality mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityDisabledWithTypeVarRestrictions mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCustomEqDecoratedStrictEquality mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityTypeVsCallable mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityMetaclass mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityWithALiteralNewType mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityWithALiteral mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testCustomEqVarStrictEquality mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testEmptyListOverlap mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUnimportedHintAny mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testOverlappingClassCallables mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAssertionLazilyWithIsNone mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualityWithFixedLengthTupleInCheck mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAssertionLazilyWithIsInstance mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testOverlappingAnyTypeWithoutStrictOptional mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testAssertCurrentFrameIsNotUnreachable mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUnimportedHintAnyLower mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testTypeVarAsValue mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testUnimportedHintOptional
mypy/test/testcheck.py::TypeCheckSuite::check-expressions.test::testStrictEqualitySequenceAndCustomEq