i would suspect:
1- handover parameters : the cell B is the preferred cell, and cell A will “push” MS towards it. I don’t which vendor you’re using (i forgot), but it usually has to do with different layers (overlaid, underlaid) or different frequencies (1800 is preferred)
2- is that a “directed retry” ? the call setup is performed on cell A : is the TCH allocated on cell A for a while SDCCH(cell A) -> TCH(cell A) -> TCH(cell B), or is there actually a SDCCH(cell A) –> TCH(cell B) directly ? You can check this by looking at the Layer 3 messages.
your experiment is very good : it shows that cell A can indeed carry the call if needed –> it means that the cell A is not interfered (unless cell B is the interferer ???) and cell A is not congested.
so IMO, check your directed retry and handovers parameters, along with the cells band and cell types.