I did some further digging on the issue and found function HAL_FDCAN_ConfigTxDelayCompensation. This function is needed when operating at 8Mbps (I had to start using it after 5Mbps).
Since the bit time is so small, the transmitter delays play a bigger role and will cause errors. The delay can be compensated by using the above function and then activating the functionality with HAL_FDCAN_EnableTxDelayCompensation function.
This allowed me to transmit with 1Mbps in arbitration phase and 8Mbps in data phase with the occasional stuffing error. Final piece to the puzzle was adjusting the settings on the CAN module so that both arbitration and data phase use the same prescaler and arbitration just uses a very large bit time quanta (I adjusted for 80tq).
This was the last piece of the puzzle to get communication working properly with my laptop.
Hopefully someone will find this helpful.
Best regards.