Index: wp-admin/admin-functions.php
===================================================================
--- wp-admin/admin-functions.php	(revision 3003)
+++ wp-admin/admin-functions.php	(working copy)
@@ -839,15 +839,12 @@
 
 function touch_time($edit = 1, $for_post = 1) {
 	global $month, $post, $comment;
-	if ($for_post && ('draft' == $post->post_status)) {
-		$checked = 'checked="checked" ';
-		$edit = false;
-	} else {
-		$checked = ' ';
-	}
 
-	echo '<fieldset><legend><input type="checkbox" class="checkbox" name="edit_date" value="1" id="timestamp" '.$checked.'/> <label for="timestamp">'.__('Edit timestamp').'</label></legend>';
+	if ( $for_post )
+		$edit = ( ('draft' == $post->post_status) && (!$post->post_date || '0000-00-00 00:00:00' == $post->post_date) ) ? false : true;
 
+	echo '<fieldset><legend><input type="checkbox" class="checkbox" name="edit_date" value="1" id="timestamp" /> <label for="timestamp">'.__('Edit timestamp').'</label></legend>';
+
 	$time_adj = time() + (get_settings('gmt_offset') * 3600);
 	$post_date = ($for_post) ? $post->post_date : $comment->comment_date;
 	$jj = ($edit) ? mysql2date('d', $post_date) : gmdate('d', $time_adj);
@@ -876,19 +873,11 @@
 <input type="text" id="hh" name="hh" value="<?php echo $hh ?>" size="2" maxlength="2" /> : 
 <input type="text" id="mn" name="mn" value="<?php echo $mn ?>" size="2" maxlength="2" /> 
 <input type="hidden" id="ss" name="ss" value="<?php echo $ss ?>" size="2" maxlength="2" /> 
-<?php _e('Existing timestamp'); ?>: 
-	<?php
-
-	// We might need to readjust to display proper existing timestamp
-	if ($for_post && ('draft' == $post->post_status)) {
-		$jj = mysql2date('d', $post_date);
-		$mm = mysql2date('m', $post_date);
-		$aa = mysql2date('Y', $post_date);
-		$hh = mysql2date('H', $post_date);
-		$mn = mysql2date('i', $post_date);
-		$ss = mysql2date('s', $post_date);
+<?php
+	if ( $edit ) {
+		_e('Existing timestamp');
+		echo ": {$month[$mm]} $jj, $aa @ $hh:$mn";
 	}
-	echo "{$month[$mm]} $jj, $aa @ $hh:$mn";
 ?>
 </fieldset>
 	<?php
Index: wp-includes/functions-post.php
===================================================================
--- wp-includes/functions-post.php	(revision 3003)
+++ wp-includes/functions-post.php	(working copy)
@@ -54,10 +54,15 @@
 		$post_name = sanitize_title($post_name);
 	}
 	
-	if (empty($post_date))
-		$post_date = current_time('mysql');
-	if (empty($post_date_gmt)) 
-		$post_date_gmt = get_gmt_from_date($post_date);
+	// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now
+	if (empty($post_date)) {
+		if ( 'draft' != $post_status )
+			$post_date = current_time('mysql');
+	}
+	if (empty($post_date_gmt)) {
+		if ( 'draft' != $post_status )
+			$post_date_gmt = get_gmt_from_date($post_date);
+	}
 
 	if ( empty($comment_status) ) {
 		if ( $update )
@@ -376,10 +381,20 @@
  	else 
  		$post_cats = $post['post_category'];
 
+	// Drafts shouldn't be assigned a date unless explicitly done so by the user
+	if ( 'draft' == $post['post_status'] && empty($postarr['edit_date']) && empty($postarr['post_date']) && 
+	     ('0000-00-00 00:00:00' == $post['post_date']) )
+		$clear_date = true;
+	else
+		$clear_date = false;
+
 	// Merge old and new fields with new fields overwriting old ones.
 	$postarr = array_merge($post, $postarr);
 	$postarr['post_category'] = $post_cats;	
-
+	if ( $clear_date ) {
+		$postarr['post_date'] = '';
+		$postarr['post_date_gmt'] = '';
+	}
 	return wp_insert_post($postarr);
 }
 
