I guess the peak and RMS values in your graph are from BASS_ChannelGetLevelEx? If so, are you getting them during playback? BASSloud and BASS_ChannelGetLevelEx measurements would indeed be out of sync then because they see the data at different stages. BASSloud measures the data in the DSP/FX stage, while BASS_ChannelGetLevelEx measures it later in the playback buffer (so that it's in sync with what's currently being heard). If you do the measurements on a decoding channel (BASS_STREAM_DECODE), which doesn't have a playback buffer, then they should be in sync.
If you need to get the levels in sync during playback then you can move BASS_ChannelGetLevelEx calls to the DSP/FX stage via a DSP function and "push" stream. Something like this:
BASS_CHANNELINFO info;
BASS_ChannelGetInfo(stream, &info); // get stream format info
levelstream = BASS_StreamCreate(info.freq, info.chans, (info.flags & (BASS_SAMPLE_FLOAT | BASS_SAMPLE_8BITS)) | BASS_STREAM_DECODE, STREAMPROC_PUSH, 0); // create push stream with same format
BASS_ChannelSetDSP(stream, LevelDSP, (void*)levelstream, 0); // set DSP function on stream
...
void CALLBACK LevelDSP(HDSP handle, DWORD channel, void *buffer, DWORD length, void *user)
{
DWORD levelstream = (DWORD)user;
float peak;
BASS_StreamPutData(levelstream, buffer, length); // pass data to push stream
BASS_ChannelGetLevelEx(levelstream, &peak, 1, BASS_LEVEL_MONO); // get back peak level
...
Please see the documentation for details on the mentioned functions.