Markup is a claim, not a decoration
Structured data tells a machine what the page asserts without requiring it to infer. That is useful exactly when the assertion matches the visible text. When it does not - a price in markup that differs from the price on the page, a rating with no reviews behind it - the page becomes less trustworthy than one with no markup at all.
The four that carry the value
Organization on the about page: who you are, where, since when, with sameAs to your other profiles. This is the entity anchor everything else hangs from.
Product or Service on the pages that describe what you sell, with the attributes a buyer compares on. Attributes, not adjectives: a number, a range, a yes or no.
FAQPage where you answer buying questions directly. This is the type most often quoted back, because the structure matches what an answer needs.
BreadcrumbList so the position of a page within the site is explicit rather than inferred from a URL.
What is not worth the effort
Self-issued ratings and review counts. They are easy to add, trivially recognised as self-reported, and the credibility cost when they are noticed exceeds any benefit. The same goes for HowTo markup wrapped around content that is not actually a procedure.
Verify, do not assume
Two checks. First, fetch the page the way a crawler does, without executing scripts, and confirm the markup is present in the returned HTML - markup injected by client-side code frequently is not. Second, ask a model a question whose answer appears only in the markup and see whether it uses it.