I have a feeling your solution wouldn't work, as the BBS IBindingList interface expects a unique instance of an object for each row instance, that is why you have seem the BO for each instance being disposed.
Sorry for the misunderstanding. I got the idea you were suggesting that the .Dispose should be moved outside the loop.