Why doesn't drupal_render work, but render does?
Once you've done this:

$kickoff_deadline .= '&lt;h2&gt;Between kickoff and deadline&lt;/h2&gt;'.drupal_render($table);


The render array is marked as #printed, and won't be rendered again. So this

$after_deadline .= '&lt;h2&gt;After the deadline&lt;/h2&gt;' . drupal_render($table);


Will do nothing.

If you take a look at the code for render():

function render(&amp;$element) {
  if (is_array($element)) {
    show($element);
    return drupal_render($element);
  }
  else {
    // Safe-guard for inappropriate use of render() on flat variables: return
    // the variable as-is.
    return $element;
  }
}


You can see it runs show($element);, making it available for rendering again. Which is why this works:

$after_deadline .= '&lt;h2&gt;After the deadline&lt;/h2&gt;'.render($table);