Date popup field won't display in tableselect element
I still can't get the date_popup element to work in a tableselect element, so I ended up going with text field and the jQuery_ui datepicker (included in core).

  $form['dates'] = [
    '#type' =&gt; 'fieldset',
    '#title' =&gt; t('Set Dates'),
    '#collapsible' =&gt; TRUE,
    '#collapsed' =&gt; TRUE
  ];

  $form['dates']['start_date_popup'] = [
    '#type' =&gt; 'date_popup',
    '#title' =&gt; t('Start Date'),
    '#date_format' =&gt; 'Y-m-d',
    '#date_year_range' =&gt; '0:+20',
    '#maxlength' =&gt; 10,
    '#date_label_position' =&gt; 'none',
    '#id' =&gt; 'apply-start-date'
  ];

  $form['dates']['end_date_popup'] = [
    '#type' =&gt; 'date_popup',
    '#title' =&gt; t('End Date'),
    '#date_format' =&gt; 'Y-m-d',
    '#date_year_range' =&gt; '0:+20',
    '#date_label_position' =&gt; 'none',
    '#id' =&gt; 'apply-end-date'
  ];

  $form['dates']['apply_dates_button'] = [
    '#type' =&gt; 'button',
    '#value'=&gt; t('Apply Dates'),
    '#attributes' =&gt; array('id' =&gt; array('apply-dates')),
  ];

...

 'start_date' =&gt; array(
   'data'=&gt; array(
     '#type'=&gt;'textfield',
     '#value'=&gt; $new_start_date,
     '#title' =&gt; 'Start Date',
     '#title_display'=&gt;'invisible',
     '#name'=&gt; 'start_date[' . $locale . ']',
     '#id'=&gt;  'start-date[' . $locale . ']',
     '#attributes' =&gt; array('class' =&gt; array('datepicker')),
     '#size' =&gt; 10,
     '#maxlength' =&gt; 10
   ),
 ),
 'end_date' =&gt; array(
   'data'=&gt; array(
     '#type'=&gt;'textfield',
     '#value'=&gt; $new_end_date,
     '#title' =&gt; 'End Date',
     '#title_display'=&gt;'invisible',
     '#name'=&gt; 'end_date[' . $locale . ']',
     '#id'=&gt; 'end-date[' . $locale . ']',
     '#attributes' =&gt; array('class' =&gt; array('datepicker')),
     '#size' =&gt; 10,
     '#maxlength' =&gt; 10
   ),
 ),


and this JS behavior:

(function ($) {
  Drupal.behaviors.dashboardDatepicker = {
    attach: function (context, settings) {
      // Attach the datepicker to the selected fields.
      $( ".datepicker" ).datepicker({
        dateFormat: "yy-mm-dd",
        changeYear: true,
        yearRange: '-30:+30',
        minDate: '-0',
        showButtonPanel: true
      });

      // Add click handler for apply button.
      $("#apply-dates", context).click(function(event) {
        // Keep the form from being submitted.
        event.preventDefault();
        // Get the dates from the fieldset
        var startDate = $("input[id*='apply-start-date']").val();
        var endDate = $("input[id*='apply-end-date']").val();
        // Get the set of selected checkboxes.
        if(startDate) {
          $("table#locale-table").find("tr.selected").find("input[id*='start-date']").val(startDate);
        }
        if (endDate) {
          $("table#locale-table").find("tr.selected").find("input[id*='end-date']").val(endDate);
        }
      })
    }
  };
}(jQuery));