Probably because of the time it takes the HAL_TIM_PWM_Start_DMA() call to actually start the timer. If you want both timers to start at exactly the same time you need to configure them to start from a common trigger source. If you just need them "closer" but not exact, write your own "start" code that writes the final "enable" bit to the two times on two adjacent lines of code.
The result is bizarre in that the first channel runs to some form of effective disable (setting CCRx above ARR) before the second is started, and vice versa. Maybe consequence of declaring sin_table to have 2 elements and then use 3 for the DMA (i.e. it uses something "random" beyond the table).
I don't recommend trying to salvage the above code. To change both channels simultaneously by DMA, you should use the DMAR/DCR mechanism. It may be clickable in CubeMX, but I don't use Cube.