How do I control the order in which hooks fire?
CRM/Utils/Hook.php indirectly calls CRM/Extension/Mapper.php::getActiveModuleFiles which does

SELECT full_name, file
        FROM civicrm_extension
        WHERE is_active = 1
        AND type = "module"

So there is no well-defined order. You could of course hack that line to add an ORDER BY.