This is going back to the idea of individually capturing the AutoFilter settings and restoring them, but may solve the Freeze Panes issue.
<font face=Courier New><SPAN style="color:#00007F">Sub</SPAN> ReDoAutoFilter()
<SPAN style="color:#00007F">Dim</SPAN> w <SPAN style="color:#00007F">As</SPAN> Worksheet
<SPAN style="color:#00007F">Dim</SPAN> filterArray()
<SPAN style="color:#00007F">Dim</SPAN> currentFiltRange <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> col <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Integer</SPAN>
<SPAN style="color:#00007F">Set</SPAN> w = ActiveSheet
<SPAN style="color:#007F00">' Capture AutoFilter settings</SPAN>
<SPAN style="color:#00007F">With</SPAN> w.AutoFilter
currentFiltRange = .Range.Address
<SPAN style="color:#00007F">With</SPAN> .Filters
<SPAN style="color:#00007F">ReDim</SPAN> filterArray(1 <SPAN style="color:#00007F">To</SPAN> .Count, 1 <SPAN style="color:#00007F">To</SPAN> 3)
<SPAN style="color:#00007F">For</SPAN> f = 1 <SPAN style="color:#00007F">To</SPAN> .Count
<SPAN style="color:#00007F">With</SPAN> .Item(f)
<SPAN style="color:#00007F">If</SPAN> .On <SPAN style="color:#00007F">Then</SPAN>
filterArray(f, 1) = .Criteria1
<SPAN style="color:#00007F">If</SPAN> .Operator <SPAN style="color:#00007F">Then</SPAN>
filterArray(f, 2) = .Operator
filterArray(f, 3) = .Criteria2
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN>
<SPAN style="color:#00007F">Next</SPAN> f
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN>
<SPAN style="color:#007F00">'Remove AutoFilter and Frozen Panes</SPAN>
w.AutoFilterMode = <SPAN style="color:#00007F">False</SPAN>
ActiveWindow.FreezePanes = <SPAN style="color:#00007F">False</SPAN>
<SPAN style="color:#007F00">' Your code here</SPAN>
<SPAN style="color:#007F00">' Freeze panes at C3</SPAN>
Range("C3").Select
ActiveWindow.FreezePanes = <SPAN style="color:#00007F">True</SPAN>
<SPAN style="color:#007F00">' Restore Filter settings</SPAN>
<SPAN style="color:#00007F">For</SPAN> col = 1 <SPAN style="color:#00007F">To</SPAN> <SPAN style="color:#00007F">UBound</SPAN>(filterArray(), 1)
<SPAN style="color:#00007F">If</SPAN> <SPAN style="color:#00007F">Not</SPAN> IsEmpty(filterArray(col, 1)) <SPAN style="color:#00007F">Then</SPAN>
<SPAN style="color:#00007F">If</SPAN> filterArray(col, 2) <SPAN style="color:#00007F">Then</SPAN>
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1), _
Operator:=filterArray(col, 2), _
Criteria2:=filterArray(col, 3)
<SPAN style="color:#00007F">Else</SPAN>
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1)
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">Next</SPAN> col
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
</FONT>