I had some controls that I was dynamically creating. When I would click my button to postback I was finding that the code had no idea about those controls, even though I could see them in the page I just posted. The controls were also still there when the code returned to the web page.
It turns out that you have to recreate the dynamic controls every time. I avoided this answer, since recreating the control I thought would reinitialize the values and I would lose what the user has chosen on the page. It turns out the viewstate figured it out and just needed to the control to be created each time for it to have a place for it to save its values.
It looks like Page_Load and Page_Init both work for this purpose.