Using Entity metadata wrappers to change field value under hook_node_insert()
The method you are using the save the field isn't ideal.
For setting the field values you should use the set() function provided by the EntityMetadataWrapper class.

function mymodule_node_insert($node) {
  if (!_is_dynamic_type($node-&gt;type))
    return;

  $messagew = entity_metadata_wrapper('message', message_create('post', array('uid' =&gt; $node-&gt;uid)));

  //copy terms
  $nodew = entity_metadata_wrapper('node', $node);
  //below loads a full taxonomy term
  $nodew-&gt;field_hidden_type = taxonomy_term_machine_name_load('event', 'hidden_type'); 

  $messagew-&gt;field_hidden_type-&gt;set($nodew-&gt;field_hidden_type-&gt;value());
  $messagew-&gt;save();
}


On a side note, I see that there is not check on the node type, or any other parameters in the implementation of  hook_node_insert. Note that it will get triggered every time a node of any content type is created.