In a tight loop, the calculations take precedence so Matlab ends up not bothering to update the GUI until it has time again, i.e. once the loop's finished. You can force a GUI update by calling drawnow
after updating the string, like so:
set(handles.ProcessImage, 'String', 'Processing Image #');
drawnow; % force the new string to be rendered
Be aware that you could take a massive performance hit, if the code in the loop is short but has many iterations. If there are relatively few iterations but each one takes a long time, you shouldn't notice the difference.