Personnellement Je fais comme ci-dessous; c'est un peu tiré par les cheveux mais je n'ai pas trouvé d'autre moyen...
Il me semble avoir lu qq part qu'il était prévu d' intégrer le fetch et l'update de l'array_options dans les méthodes du produit dans une prochaine release
function test() {
global $user,$db;
$id = 1123;
$prod = new Product($db);
$prod->fetch($id);
$extrafields = new ExtraFields($db);
$extralabels=$extrafields->fetch_name_optionals_label('product'); // Get extrafields cols
$prod->fetch_optionals($id,$extralabels); //fill $prod->array_options
foreach($extralabels as $col=>$val) // Build a new array_options
$new_options['options_'.$col]=$prod->array_options['options_'.$col];
$new_options['options_MyPersoField']='ceci est un test'; // Update the target field
$prod->array_options=$new_options; // Replace arry_option by the new one
$prod->update($id, $user); // Save the values;
}