Ignoring unpublished/published as criteria for "Has new content"
You need custom code to achieve this. There's 2 things to know here:

Updated Status Logic

The logic for driving the New &amp; Updated labels is based on the history table (which stores the last time a user viewed a node) &amp; the node.changed column:

$changed = $this-&gt;get_value($values, 'changed');

$last_comment = module_exists('comment') &amp;&amp; !empty($this-&gt;options['comments']) ? $this-&gt;get_value($values, 'last_comment') : 0;

if (!$last_read &amp;&amp; $changed &gt; NODE_NEW_LIMIT) {
  $mark = MARK_NEW;
}
elseif ($changed &gt; $last_read &amp;&amp; $changed &gt; NODE_NEW_LIMIT) {
  $mark = MARK_UPDATED;
}
elseif ($last_comment &gt; $last_read &amp;&amp; $last_comment &gt; NODE_NEW_LIMIT) {
  $mark = MARK_UPDATED;
}
return $this-&gt;render_link(theme('mark', array('type' =&gt; $mark)), $values);


Essentially, it's comparing when a user last viewed a node vs. when a node was last changed. 

What isn't known, is what was changed (e.g. the publish status) so to implement some sort of exclusionary logic you're going to have to track the history of publishing/unpublishing to check if the last update was just a change in publish status (node.status).

Updated Status Display

Assuming you have that logic in place, it's possible to override the output a views field. Here you can extend the views_handler_field_history_user_timestamp class with your own custom class implementing a render() method that adds the logic to check whether the last change was only a publish status change. In the final step, you can use hook_views_data_alter to override the handler for the Has new content field.