Custom post meta data are generally updated in the database via a callback function hooked into save_post. (Others: draft_post, publish_post, future_post.)
The custom post meta data are part of the $_POST data sent on-submit for the edit post screen, so simply look for them there, sanitize them, and then update them in the database.
I’m omitting things like nonce-checking and sanitizing $_POST data. You’ll want to incorporate them into your callback as necessary.
For example:
function wpse63622_save_custom_post_metadata() {
// Globalize $post
global $post;
// Find custom post meta data in $_POST
// DON'T FORGET TO SANITIZE
$custom_post_meta_1 = ( isset( $_POST['_custom_meta_key_1'] ) ? $_POST['_custom_meta_key_1'] : false );
$custom_post_meta_2 = ( isset( $_POST['_custom_meta_key_2'] ) ? $_POST['_custom_meta_key_2'] : false );
$custom_post_meta_3 = ( isset( $_POST['_custom_meta_key_3'] ) ? $_POST['_custom_meta_key_3'] : false );
// Update the database
if ( $custom_post_meta_1 ) {
update_post_meta( $post->ID, '_custom_meta_key_1', $custom_post_meta_1 );
}
if ( $custom_post_meta_2 ) {
update_post_meta( $post->ID, '_custom_meta_key_2', $custom_post_meta_2 );
}
if ( $custom_post_meta_3 ) {
update_post_meta( $post->ID, '_custom_meta_key_3', $custom_post_meta_3 );
}
}
add_action( 'save_post', 'wpse63622_save_custom_post_metadata' );
add_action( 'publish_post', 'wpse63622_save_custom_post_metadata' );