As urben mentioned GSmartControl can be used.
If you go online and download a live gparted iso you can boot from it and check the whole hdd this way. I'd do it this way, but also see vendor/smart drive check info.
Alternatively you can use GSmartControl on the Linux portion of hard drive and in windows type in on a command prompt:
chkdsk /f c:
The problem to me with booting into each OS is that I am not sure that is going to get to your potentially real problem.I say this because those checks do not touch all partitions like boot, efi,and a few others, etc...
With the model of your PC, it may come with a hotkey option to get into a hard drive diagnostic program. This is a good option along with the gparted live boot option.
Going into the bios and disabling "fast boot" if it has that option may help. Although, when your Ubuntu is shutting down and rebooting, and then you get the boot options and choose Windows and then it boots to Windows as you said, but shutting down Windows and booting to Ubuntu is where you get the errors seems unusual to me unless the partition that you have Ubuntu has a bad sector/areas of the drive, or there is some corruption of system files.
I'm no expert, but grub is just an intermediary between the 2 operating systems from what I understand in simplest form. I just points to boot files depending on what OS you choose to boot from.
If you end up having to re-install Ubuntu again, I would do a re-formatting of the hard drive partitions once again before re-installing. ( Not sure what types of re-installs you have already tried)
sudo gdisk -l /dev/sda
in Ubuntu. That will reveal the type codes of your partitions. (Windows might be messing with the Ubuntu partitions if they've got the wrong type codes.)