Is there a "best practice" for overriding a contributed module's controller in Drupal 8?
To avoid conflicts with other modules you could alter the controller content in a kernel VIEW event similar to a form alter hook:

src/EventSubscriber/ControllerAlterSubscriber.php:
    

namespace Drupal\mymodule\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
 * Class ControllerAlterSubscriber.
 */
class ControllerAlterSubscriber implements EventSubscriberInterface {

  /**
   * Alters the controller output.
   */
  public function onView(GetResponseForControllerResultEvent $event) {
    $request = $event-&gt;getRequest();
    $route = $request-&gt;attributes-&gt;get('_route');

    if ($route == 'entity.webform_submission.collection') {
      $build = $event-&gt;getControllerResult();
      if (is_array($build)) {
        // alter controller build array
        $build['added_content'] = ['#markup' =&gt; '&lt;p&gt;Added by ControllerAlterSubscriber.&lt;/p&gt;'];

        $event-&gt;setControllerResult($build);
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  static function getSubscribedEvents() {
    // priority &gt; 0 so that it runs before the controller output
    // is rendered by \Drupal\Core\EventSubscriber\MainContentViewSubscriber
    $events[KernelEvents::VIEW][] = ['onView', 50];
    return $events;
  }

}


mymodule.services.yml:

services:
  mymodule.controller_alter:
    class: Drupal\mymodule\EventSubscriber\ControllerAlterSubscriber
    arguments: []
    tags:
      - { name: event_subscriber }