Hallo,
zunächst einmal solltest Du die (neue) if-Abfrage vor das WriteByte setzen (Begründung sollte klar sein, oder?). Außerdem ist es eher Quatsch, ReportProgress bei jedem Byte aufzurufen; das war einer der Gründe für meinen früheren Vorschlag mit section.
Das Hauptproblem dürfte darin liegen, dass Du bei ReportProgress auf UserState verzichtest. Damit steht dort vermutlich null; ich habe keine Ahnung, was (int)e.UserState daraus macht und wie ProgressChanged darauf reagiert. Vielleicht bleibt aus diesem Grund die ProgressBar immer und ewig auf dem Wert 0 stehen.
Aber jaenicke hat recht: Du solltest Dir angewöhnen, selbst mit dem Debugger an kritische Stellen zu gehen (dafür gibt es ihn schließlich). Setze einen Haltepunkt auf Zeile 39, also den Anfang von ProgressChanged, vergleiche die Werte der EventArgs und prüfe, wie er im Einzelschritt-Modus weitergeht.
Gruß und nochmals Frohe (Rest-) Weihnachten! Jürgen