The multiple sending of moves and draw commands is a work-around for annoying differences between ICS, and their overloading of the 'draw' command by using it both for offers and claims. FICS has an atomic draw command for solving the race condition that exists with claiming draws that are claimable only after the move. Without such a command, the draw claim would be rejected (or at least be down-graded to an offer, which might not be accepted) if you send it before the move, and might be pre-empted by an opponent move that destroys the claimability if you send it after the move.
ICC solves this by letting a claimable draw condition automatically accept any draw offer, so that you won't suffer from the down-grade of the claim to an offer. But FICS doesn't do that, and the only way guaranteed to work irrespective of how fast the opponent moves is to use their atomic command that sends draw + move on the same line. So what XBoard does is send three commands:
ICC will reject the "draw MOVE" command, without it having any effect on the game, but because it does interpret the "draw" and the MOVE in its own way, it will grant the draw. FICS will interpret the "draw" as an offer, but then will honor the atomic claim, so that the isolated MOVE will reach it after the game has already finished. It will then be rejected without any effect on the game.
Perhaps not a very elegant solution, but it works on both FICS and ICC (at the expense of drawing an error message), and even on the the public-domain ICS code that has no special provisions for solving the race condition.