What is the correct method for updating post content from a plugin?

This type of thing is most easily done from the TinyMCE editor through a plugin. Details of creating one using WordPress filters can be found here:

http://codex.wordpress.org/TinyMCE_Custom_Buttons

function myplugin_addbuttons() {
   // Don't bother doing this stuff if the current user lacks permissions
   if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') )
     return;

   // Add only in Rich Editor mode
   if ( get_user_option('rich_editing') == 'true') {
     add_filter("mce_external_plugins", "add_myplugin_tinymce_plugin");
     add_filter('mce_buttons', 'register_myplugin_button');
   }
}

function register_myplugin_button($buttons) {
   array_push($buttons, "separator", "myplugin");
   return $buttons;
}

// Load the TinyMCE plugin : editor_plugin.js (wp2.5)
function add_myplugin_tinymce_plugin($plugin_array) {
   $plugin_array['myplugin'] = URLPATH.'tinymce/editor_plugin.js';
   return $plugin_array;
}

// init process for button control
add_action('init', 'myplugin_addbuttons');

The documentation on how to write the required editor_plugin.js file to perform your desired insert will be found on the TinyMCE site:

http://www.tinymce.com/wiki.php/TinyMCE3x:Creating_a_plugin

http://www.tinymce.com/wiki.php/API3:tinymce.api.3.x

http://www.tinymce.com/wiki.php/TinyMCE3x:TinyMCE_3.x

If you really must perform the insert by clicking a button in a meta box, then perhaps a close examination of the Zemanta plugin code will be helpful. Comment on this answer with a link to that plugin if you’d like some help with that.