The timezone select is rendered by the method Mage_Install_Block_Locale::getTimezoneSelect()
that looks like this:
public function getTimezoneSelect()
{
$html = $this->getLayout()->createBlock('core/html_select')
->setName('config[timezone]')
->setId('timezone')
->setTitle(Mage::helper('install')->__('Time Zone'))
->setClass('required-entry')
->setValue($this->getTimezone())
->setOptions(Mage::app()->getLocale()->getOptionTimezones())
->getHtml();
return $html;
}
So most probably Mage::app()->getLocale()->getOptionTimezones()
returns null or an empty array.
You can start debugging there.
The values come from the file /lib/Zend/Locale/Data/supplementalData.xml
path timezoneData->mapTimezones->mapZone
.
Make sure this file is correct and has values for these tags.
Also make sure that you php version parses xml files correctly.