Parece q el compilador esta interpretando q al eliminar dichas filas y recorrerlas con el for each recorre a dicha fila y como ve q no lo encuentra entonces corta el for each
puedes tratar de usar un for normal mira
Código vb:
Ver originalFor Row As Integer = Me.dgfacturas.Rows.Count - 2 To 0 Step -1
If Me.dgfacturas.Rows(Row).Cells(12).Value = "M" Then
If Convert.ToBoolean(Me.dgfacturas.Rows(Row).Cells(0).Value) Then
Me.dgfacturas.Rows.RemoveAt(Row)
End If
End If
Next
al poner Me.dgfacturas.Rows.Count - 2 no me recorreria la ultima fila q esta para el agregado reduciendo un poco tu codigo