"We need to talk."
Translation:We moeten praten.
The semantic difference is in the negative: "We moeten niet gaan" = "We must not go", whereas "We hoeven niet te gaan" = "We don't have to go". So for moeten, you're not allowed to, while for hoeven, you can if you want, but it's not required of you.
Hoeven is only used in the negative (which includes "niet" and "geen", but also some not so obviously negative words like "maar" or "alleen"), while moeten is used for both positive and negative.
An important grammatical difference is that "hoeven" requires "te" in front of the extra verb and "moeten" doesn't.