Where and how to conditionally redirect old aliases to new aliases
This solution is based on a suggestion by @4k4 at Redirect from within controller always goes to home page. 

My custom module is named rsc.

In modules/custom/rsc the file rsc.services.yml includes the following:

services:
  rsc.event.Redirect404:
    class: Drupal\rsc\EventSubscriber\rscRedirect404
    tags:
      - {name: event_subscriber}


In modules/custom/rsc/src/EventSubscriber the file rscRedirect404.php contains the following:

&lt;?php
namespace Drupal\rsc\EventSubscriber;

use Drupal\Core\EventSubscriber\HttpExceptionSubscriberBase;
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class rscRedirect404 extends HttpExceptionSubscriberBase {

  protected function getHandledFormats() { // required
    return ['html'];
  }

  public function on404(GetResponseForExceptionEvent $event) {

    $path = \Drupal::request()-&gt;getPathInfo();
    $path = [code to modify the path from old site to new site]

    if (($url = \Drupal::service('path.validator')-&gt;getUrlIfValid($path))) {
      $event-&gt;setResponse(new RedirectResponse(URL::fromUserInput($path)-&gt;toString()));
    }
  }
}


With this in place, I see 404 redirects before they get passed to the default handler. If I do the $event-&gt;setResponse(), the user is redirected as I specify. If not, normal processing occurs.

In reality, the line that says [code to modify the path from old site to new site] is multiple lines where I do several trial-and-error tests to figure out the correct new URL,  but everything else is just as I'm using it.