You can reproduce the error with Drush:

    # drush php

    >>> $build = ['#markup' => 'TEST'];
    => [
         "#markup" => "TEST",
       ]

    >>> $rendered = \Drupal::service('renderer')->render($build);
    LogicException with message 'Render context is empty, because render() was called outside of a renderRoot() or renderPlain() call. Use renderPlain()/renderRoot() or #lazy_builder/#pre_render instead.'

    >>> $rendered = \Drupal::service('renderer')->renderPlain($build);
    => Drupal\Core\Render\Markup {#4668
         markup: "TEST",
       }

So as the error message says modules which hook into the node save process should use renderPlain() instead. They shouldn't assume nodes are always saved within a render context of a themed Drupal page.

Code example for rendering a view in isolation:

    $build = $view->buildRenderable();
    $rendered = \Drupal::service('renderer')->renderPlain($build);