el campo oculto asp.net no retiene el valor cuando se actualiza desde el código detrás

Estoy usando un campo oculto para almacenar un valor en una página asp.net. Básicamente establezco el valor del campo oculto cada vez que se cambia un valor en el formulario, es decir, nombre, fecha, etc. El campo está en un formulario web que tiene una página maestra y está en la sección de contenido:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:HiddenField ID="hdnDirtyFlag" runat="server" Value='false' />

Cambio el valor del campo en javascript llamando a una función cada vez que se activa un evento onchange en otros controles en el formulario web:

<asp:TextBox CssClass="niceInput" ID="tbFirstName" runat="server" MaxLength="40" Width="150" onchange='SetHiddenVariable();'></asp:TextBox>

 <script type="text/javascript">
     function SetHiddenVariable() {
         // Set the value of the hidden variable so we know a field has been updated
         var hiddenControl = '<%= hdnDirtyFlag.ClientID %>';
         document.getElementById(hiddenControl).value = 'true';
     }
</script>

Hasta aquí todo bien. Cuando la página carga el valor del campo oculto es 'falso', y si no cambio ningún valor en el formulario web, sigue siendo falso. Cada vez que cambio otro control, se llama a la función de JavaScript y el valor del campo oculto se actualiza a 'verdadero'. De nuevo, todo está bien.

Después de enviar el formulario y actualizar la base de datos, configuro el valor del campo oculto de nuevo a 'falso' en el código detrás:

hdnDirtyFlag.Value = "false";

Pero cuando hago clic en otro botón y hago una devolución de datos, el valor del campo oculto todavía está en 'verdadero'.

¿Alguien puede explicar por qué es esto? Revisé el código detrás e inmediatamente después de cambiar el valor puedo ver que el valor es 'falso'. Hay un asp: UpdatePanel en la página, pero el campo oculto no es parte de este panel.

EDITAR:

Este es el código que uso para verificar el valor del campo en el código detrás de la segunda devolución de datos, después de que se haya establecido en falso en el último paso de la primera devolución de datos. El valor permanece en verdadero por alguna razón en la segunda devolución de datos, después de que se haya establecido en verdadero en JavaScript en el lado del cliente y luego se haya establecido en falso en el código detrás, como se muestra arriba:

if (hdnDirtyFlag.Value == "true")
{
    UpdateSecurityObject(); 
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta