Ok, here is my latest code:
lame = lame_init();
lame_set_in_samplerate(lame, 44100);
lame_set_mode(lame, JOINT_STEREO);
lame_set_quality(lame, 7);
lame_set_findReplayGain(lame, 0);
lame_set_brate(lame, 128);
lame_set_VBR_min_bitrate_kbps(lame, lame_get_brate(lame));
lame_set_out_samplerate(lame, 44100);
lame_init_params(lame);
BASS_ChannelSetDSP(m_MixerHandle, EncodingDSP, self, -1000);
encHandle=BASS_Encode_Start(m_MixerHandle, NULL, BASS_ENCODE_PCM|BASS_ENCODE_NOHEAD|BASS_ENCODE_PAUSE, NULL, NULL);
BASS_Encode_CastInit(encHandle, "192.168.0.48:8000",
"ais22b",
BASS_ENCODE_TYPE_MP3,
"TribeFM",
NULL,
"Various",
NULL, 0, 128, NO);
BASS_ChannelPlay(m_MixerHandle, true);
void CALLBACK EncodingDSP(HDSP handle, DWORD channel, void *buffer, DWORD length, void *user)
{
int write;
HENCODE encHandle = [(Broadcaster*)user encHandle];
unsigned char mp3_buffer[8000];
write = lame_encode_buffer_interleaved(lame, buffer, length/2, mp3_buffer, 8000);
BASS_Encode_Write(encHandle, mp3_buffer, write);
}
This has the output from BASS back to smooth sounding audio.
However the sound from SHOUTcast is broken up and has crunching noises in it.
I'm assuming it's because of my hacked "No idea what i'm doing" attempt of a callback function.
Please help

Lame Functions Explained:
http://openinnowhere.sourceforge.net/lameonj/javadoc/lame/std/Lame.html