Ok so i made some progress figuring this out on my end today:
I built a standalone console app to try and reproduce this desync issue but couldn't get it to reproduce. After that i tried a few things going through our codebase, and stumbled on a fix.
So to reference the docs about BASS_Mixer_Create
The playback buffer can be flushed by calling BASS_ChannelPlay (restart = TRUE) or BASS_ChannelSetPosition (pos = 0). That can also be done to restart a mixer that has ended.
basically we use the mixer position plus clearing the buffer when pausing/seeking and keeping an accumulated pre-seek/pause value to have the full audio position.
It appears that under certain cases, calling BASS_ChannelSetPosition (pos = 0) then after not doing anything else calling BASS_ChannelPlay (restart = TRUE) will cause a desync specifically on the mp3 files i've been testing (not sure why this is the case as it doesn't make sense as to be format specific) But essentially calling BASS_ChannelPlay without restart seems to fix the issue in our game. Maybe there is an issue there to be looked at?
I don't really understand why the following process causes this issue:
pause mixer using Bass_ChannelPause
clearing the mixer buffer using BASS_ChannelSetPosition (pos = 0)
Seeking individual mixer streams using BassMix.ChannelSetPosition
Play mixer using BASS_ChannelPlay (restart = TRUE) <- desync happening here