I am not really into tone generation...but just a few side notes...
a) the first call to "Marshal.Copy(buffer, _data, 0, l2);" seems to be not needed, since in you callback you just need to fill the buffer for BASS, so you don't need to copy the data from bass first...
b) In your for-loop you set different values for the left and the right channel
(each short value in the buffer will alter left, richt, left, right, since you setup 2 channels)
So may be this would help:
for (int c = 0; c < l2/2; c++)
{
_data[2*c] = (short) Math.Round(30000 * Math.Sin(sin));
_data[2*c + 1] = _data[2*c];
...
}