Usually means that Application.EnableEvents was not disabled and the _Change event kept calling itself
Yep, Probably what's happening.

Sheet1 code:
Option Explicit

Private Sub Worksheet_Calculate()
'Necessary with Formulas in A1
        CheckB1 
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Application.enableEvents = False
        If Not Intersect(Target, Range("A1")) Is Nothing Then CheckB1 'A1 changed
Application.enableEvents = True
End Sub

Private Sub CheckB1()
        If Sheet2.Range("B1") = "" Then Sheet2.Range("B1") = Range("A1")
End Sub
Sheet2 code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Application.enableEvents = False
        If Not Intersect(Target, Range("B1")) Is Nothing Then CheckA1 'B1 changed
Application.enableEvents = True
End Sub

Private Sub CheckA1()
    If Range("B1") = "" Then Range(" B1") = Sheet2.Range("A1")
End Sub

BTW, with With Target.Cells(1, 1), What happens when Range("A1:C1") = Range("A2:C2")

That's why I like If Not Intersect(Target, Range("blah")) Is Nothing