My understanding is as follows:
1) The contingent of Zulu were not part of the main force from the previous battle, but sent round the British flank to secure lines of communication and prevent defeat. They had less discipline as many contingents went off on their own to conduct smaller raids.
2) Prior to the battle the Zulu fast marched all day from 8am to 4pm and then fought till 2am with minor skirmishes after that till 4am. So they were tired by they time they arrived and exhausted by the end.
3) Most importantly - the location was well fortified.
One comment at the link below states: “The British wall was too high for the Zulus to scale, so they resorted to crouching under the wall, trying to get hold of the defenders’ MartiniHenry rifles, slashing at British soldiers with assegais or firing their weapons through the wall. At places, they clambered over each other’s bodies to drive the British off the walls but were driven back”.
The British successfully shrunk their lines of battle into the cattle krall to prevent incursion behind their lines.
This despite two support forces leaving early in the attack. One of which was already exhausted from the earlier battle.
4) Zulu’s left in the morning. Had they stayed they would have likely overrun the position. As: ‘Of 20,000 rounds in reserve at the mission, only 900 remained.’.
5) second most important and likely why the Zulus left. At 8AM the relief column arrived.
solid summary here: https://en.wikipedia.org/wiki/Battle_of_Rorke’s_Drift
But it has been a while. I may have to crack open my copy of The Washing of the Spears to verify.