The Update method on the UpdatePanel does not work the way you're expecting.
From MSDN http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.update(v=vs.110).aspx: Call the Update method if you have server code that must execute to determine whether an UpdatePanel control should be updated.
If you wanted to simulate a process progressing, you could fire off multiple partial postbacks by calling hidden buttons. Each button would do another step and call the button click for the next via javascript. This could be error prone and is inefficient. But is one way to do what you're attempting. Another would be to use JQuery and (still make several calls) using $.ajax, call the next step in the success callback.
Using your code as an example, this is a basic working example of what you're wanting - the way I understand:
Markup
<asp:UpdatePanel ID="ProgressUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="btnCreateFiles" runat="server" Text="Go" OnClick="btnCreateFiles_Click" />
<asp:Label ID="lblCaption" runat="server" Text="" />
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript">
$(document).ready(function () {
bindButton();
});
function bindButton() {
$('#<%=btnCreateFiles.ClientID%>').on('click', function () {
$('#<%=lblCaption.ClientID%>').html('Please Wait...');
});
}
</script>
Code Behind
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
//txtBoxEnvironment.Text = CurrentEnvironment;
//DAL.setConnectionString(CurrentEnvironment);
}
ProgressUpdatePanel.ContentTemplateContainer.Controls.Add(lblCaption);
ProgressUpdatePanel.Update();
lblCaption.Text = "";
}
protected void btnCreateFiles_Click(object sender, EventArgs e) {
//All of the processing is done here...
//This works correctly the first time a user click the button
//But the second time, this text remains and the 'Please wait...' text from the lblProgress label
// is added above this text.
ProgressUpdatePanel.ContentTemplateContainer.Controls.Add(lblCaption);
ProgressUpdatePanel.Update();
lblCaption.Text = "Processing...completed.";
System.Threading.Thread.Sleep(1000);
ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "bindButton", "bindButton();", true);
}