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);