How to override the system timezone in settings.php?
The first example ($config['system.date']['timezone']['default'] = 'Europe/London';) is the correct way to override config values in your settings.php file.
It sounds like you've hit an issue noted in the config override system docs:

Note that values overridden via $config within settings.php will not be viewable from the Drupal administration interface (until #2408549: There is no indication on configuration forms if there are overridden values is fixed, until then you can use Configuration Override Warn or Config Override Inspector) or from inspection via drush (unless you add the --include-overridden flag). The administration interface displays the values stored in configuration so that you can stage changes to other environments that don't have the overrides.

So if you view /admin/config/regional/settings page or the drush cget system.date timezone.default command, it won't show the overridden value.
You can try something like drush cget --include-overridden system.date timezone.default or
drush eval 'print \Drupal::config(&quot;system.date&quot;)-&gt;get(&quot;timezone.default&quot;);' to confirm your overridden value is actually being set in your settings.php