Is it an actual HiddenField or a TextBox that has its visible property set to false?
If it is a TextBox that has its visible property set to false then it will not be rendered on the page and always returns empty.
A hidden field needs to de defined as;
<asp:HiddenField ID="testHidden" Value="" runat="server"/>
or
HiddenField test = new HiddenField();
test.ID = "testHidden";
test.Value = string.Empty;
container.Controls.Add(test);