GRUB does its job but it appears the problem occurs when control is
handed over to the init system.
At the GRUB menu edit the linux line to add systemd.unit=rescue.target
or systemd.unit=emergency.target.
https://freedesktop.org/wiki/Software/systemd/Debugging/
You might get to a terminal to look at what the journalctl command and
/var/log/syslog reveal.
systemd.log_level=debug systemd.log_target=console console=ttyS0,38400
and
systemd.journald.forward_to_console=1 console=ttyS0,38400
systemd.debug-shell=1