Modifying a Views 3 underlying query
A little googling and I found one solution, I'm not sure if it is the correct way to go.

I created a small module with one function, installed and enabled the module and it seems to work exactly as I need.

The mymodule.module file contains the following code:

function mymodule_views_query_alter(&amp;$view, &amp;$query) {
  // this is the name of our View and Display
  if ($view-&gt;name == 'upcoming' &amp;&amp; $view-&gt;current_display == 'block') {
    // override the ordering
    // this is because the two different date fields are one or the other
    // but not both fields, so we coalesce.
    $query-&gt;orderby = array(
      array(
        'field' =&gt; 'COALESCE( field_data_field_repeatdate_field_repeatdate_value, field_data_field_startdate_field_startdate_value)',
        'direction' =&gt; 'ASC',
      )
    );
  }
}


This gets called in when needed and uses COALLESCE to on the sort order (