If I had the time/could be bothered I'd put timers around each of the send/receive and find the max/min/avg values. But that ain't gonna happen in the next week or so.
I've done that, get the following:
ID: BFL0 Dev Max: 0.024049 Dev Min: 0.000366 Dev Av: 0.009301
ID: BFL1 Dev Max: 15.335547 Dev Min: 0.000389 Dev Av: 0.012155
ID: BFL2 Dev Max: 15.335506 Dev Min: 3.8E-5 Dev Av: 0.011484
ID: BFL3 Dev Max: 15.33545 Dev Min: 0.00036 Dev Av: 0.027547
ID: BFL4 Dev Max: 0.02345 Dev Min: 0.00036 Dev Av: 0.009153
ID: BFL5 Dev Max: 0.023163 Dev Min: 0.000404 Dev Av: 0.008941
So I put get times immedately before and after the serial port read function inside BFgets.
Dev max is (surpisingly) the max time a read took
Dev min is (surpisingly) the min time a read took
Dev av is (surpisingly) the overall average, that is all the read times summed, then divided my the read count.
So it's pretty apparent that when the single throttles, comms just stop.