Problem with custom dropdown default value
Are you providing #default_value when loading form? If yes, you need to make sure that you're providing what is selected by user first. Check example below:

global $user;
// Check if user has set the timezone,
// if yes use that else set to default 'America/Creston'

$timezone = isset($user-&gt;timezone) ? $user-&gt;timezone : 'America/Creston';
$form['timezone'] = array(
  '#type' =&gt; 'select',
  '#title' =&gt; 'Select Timezone',
  '#options' =&gt; $options,
  '#default_value' =&gt; $timezone,
);


As per Form API Reference Documentation, it says #default value is:


  The value of the form element that will be displayed or selected
  initially if the form has not been submitted yet.