Rav Yosef Yehudah, the son of the Sorotzkin Rebbe, gives I think a nice explanation to this question in his sefer Magged Yosef. Long story short, she wasn't surprised. She was faking it, as will be explained.
The verses in discussion are as follows (Genesis 18:10, 12, 13, 15):
ויאמר שוב אשוב אליך כעת חיה והנה-בן לשרה אשתך ושרה שמעת פתח האהל והוא אחריו: ותצחק שרה בקרבה לאמר אחרי בלתי לי עדנה ואדני זקן: ויאמר יקוק אל אברהם למה זה צחקה שרה לאמר האף אמנם אלד ואני זקן: ותכחש שרה לאמר לא צחקתי כי יראה ויאמר כי צחקת
[The Angel] said: “I will surely return at this time [next year] and behold, Sarah your wife will have a son”. Sarah [in the meantime] was listening at the entrance to the tent, and he/it was behind him. Sarah laughed within, saying: “After no longer having my period? As well, my husband is old?!” Hashem said to Avraham, why is it that Sarah laughed, saying: “Is it true that I’ll give birth, since I am old?” Sarah denied [this], and said, “I didn’t laugh!” because she was afraid. He said: “Actually, you laughed”.
To answer this question, some ambiguities of the story/the verses need be clarified. There’s a strange part in verse 10, which says:
ושרה שמעת פתח האהל והוא אחריו
It means that Sarah was listening at the entrance of the tent, which makes sense. The next two words however, are ambiguous. It says “he” was behind “him”. Who was behind who? Rashi explains1 that “he” is referring to the entrance (since there is no “it” in Hebrew, it refers to the entrance in masculine). He also explains “him” is the Angel that was speaking. Therefore, the verse is telling us that the Angel didn’t see Sarah listening behind him. According to this explanation, what does this detail add to the story? The Angel shouldn’t have minded Sarah listening, especially since he was talking about her. Why do we need to know this?
Targum "Yonasan"2 has an interesting translation of the last two words, not like Rashi. He writes:
וישמעאל קאי בתריה וצית מה דאמר מלאכא
Yishmael, Avraham’s son from Sarah’s maidservant Hagar, was listening as well behind the Angel. He was listening to what the Angel was saying. The Targum Yerushalmi2 says the same, based on the Midrash3. With this explanation, Sarah’s reaction can be understood. Sarah saw Yishmael listening, and was worried he would become upset at the news of her having a son. Until now, Yishmael had the status as Avraham’s first born. Hashem promised once Yitzchak is born, he’ll become the main son4. Previously5, Chazal taught us that Sarah cast ayin hara on Hagar, causing her to miscarry. Sarah was worried Yishmael would do the same to her, as revenge for her mother. This is why she laughed. She believed the news was true, but she hoped Yishmael wouldn’t take it seriously if she appeared to laugh at the Angel.
This fits very nicely with the strange words ותצחק שרה בקרבה, literally “she laughed with her innards”6. Rashi explains7 that she “looked” at her innards in disbelief and said: “how could this womb carry a child?” It sounds like she said this out loud. The reason would be because Yishmael was listening in. Chazal teach us8 that the Egyptian King Ptolemy ordered seventy Sages to translate the Torah into Greek (known today as the Septuagint). Chazal list different changes the Sages made in their translation9, since the literal translation would appear problematic to the uninitiated. Instead they translated it according to the proper interpretation. This verse is one of the changes. Instead of ותצחק בקרבה, they translated it as ותצחק בקרוביה, she laughed with her relatives. Meaning, Yishmael.
With that explanation for why she laughed, why was Hashem upset at her? He knew her intentions were proper. The reason is because according to the strict middas hadin, letter of the law, she showed a lack of bitachon, faith in Hashem. He promised her she would have a child; what was there to be afraid of? Someone of her stature should have had full faith that all would go as foretold. This is why she responded with לא צחקתי כי יראה, I didn’t laugh, rather I was afraid. She meant she believed she would have a child. At the same time, she was afraid of Yishmael. Hashem responded10 that she still laughed. Despite her faith, it was not complete.
1 To Genesis 18:12
2 Ad. loc.
3 Bereishis Rabbah 48:16. This explanation is also brought by the Chizkuni ad. loc.
4 Genesis 17:19
5 Ibid 16:6
6 Ibid 18:12
7 Ad. loc.
8 Megillah 9a
9 It was a miracle that they all separately made the same changes
10 Cf. Targum Yonasan, Ramban, Ohr HaChaim ad. loc.