I believe the current trend is to bind B's 2000 to the pot, and give B the option to "top-up" his bet to a call or he may fold. In your example, B did not verbalize "call", but even if he did say "call" but mistakenly thought he was calling 2000, I expect the same option to be given particularly where there is a significant discrepancy between the amount put into the pot and the amount to be called.
I sympathize with the observation about the angle shooting though - presumably if B only puts in 2K and there is some reaction from a subsequent player that lets B reconsider calling A's all-in or not, then B may have an incentive to try the angle. On the other hand, if the rule were to force a call of the all-in in every circumstance, an angle would still be open albeit a different one - B could put in 2K and then 'reluctantly' call with a strong hand, hoping to induce another player with a weaker hand to call (where the weaker hand might not have called had B more confidently called A's all-in bet). So neither option would prevent angle-shooting.
There is also the fairness issue that you alluded to - it is not uncommon to come across situations where A's all-in is for a significant amount and it is clear that B honestly thought he was calling only 2K (e.g. especially if A's chips were not pushed forward to be counted and the all-in was not clearly announced by the dealer). In these cases, it may be unfair to hold B to the all-in call, and I think giving B the option of sacrificing the 2000 and folding is a reasonable compromise. If B repeatedly "under-calls" and you suspect an angle, you could always issue a warning.
I think your example is slightly different from the typical Accepted Action scenarios, where B has the opportunity to count the chips of A's all-in, but relies on the statement of a player or the dealer of the all-in amount rather than confirming the amount himself.
K