You got infinite loop because Mage_Newsletter also capture customer_save_after
event to save subscribe data.
You can update group id by raw query like bellow:
public function newsletter_subscriber_change($observer) {
try {
// get status of subscriber
$subscriber = $observer->getEvent()->getSubscriber();
$status = $subscriber->getStatus();
$email = $subscriber->getEmail();
$customer = Mage::getSingleton('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($email);
$adapter = Mage::getSingleton('core/resource');
/* @var $conn Varien_Db_Adapter_Interface */
$conn = $adapter->getConnection('core_write');
$update = 'UPDATE ' . $customer->getResource()->getTable('customer/customer_enity')
. ' SET group_id = ? WHERE entity_id = ?';
$conn->query($update, array(9, $customer->getId()));
} catch (Exception $e) {
Mage::log("newsletter_subscriber_change observer failed: " . $e->getMessage());
}
}