I added some msgbox() calls (using easygui) around the various calls to update the progress dialog. When these were in place the dialog updated as expected, and then hid itself at the end as expected. I am sure this is a clue to the problem on Windows although I am not sure yet what it means

It is almost as though the dialog is not getting a chance to process events and update itself at the appropriate points.
I will continue to investigate further.