A Note: Actions and Filters are not really interchangeable: Filters typically must return the passed data or it’s going to break something.
Building off of what m0r7if3r said, wp_insert_post_data
is a filter, so you should be modifying the post’s $data and returning it at the end of the function.
(Alternatively, you could global the variables you need to alter during an appropriate action, then change it.)
for a tutorial, first read: http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/post.php#L2566
Then consider the following (I haven’t tested this but it’s based on your code):
function cfc_reset_postdate( $data ) {
$date = get_post_meta( get_the_ID(), 'cfc_date', true );
$date = DateTime::createFromFormat('D - M j, Y', $date);
$date = $date->format('Y-m-d');
$data['post_date'] = $date;
return $data;
}
add_filter( 'wp_insert_post_data', 'cfc_reset_postdate');