Your code looks correct.
You should only need to save the item option --- you shouldn’t need to call $_item->addOption over again.
What event are you hooking into?
Once again, your code should be working, but if this is a critical issue you could always resort to raw sql:
$table = Mage::getSingleton('core/resource')->getTableName('sales_flat_quote_item_option');
$resource = Mage::getSingleton('core/resource');
$readConnection = $resource->getConnection('core_read');
$readConnection->query('UPDATE ' . $table . ' SET value = "' . $value . '" WHERE item_id = ' . $itemid . ' AND code = "$code");