What's the difference between Brand and Organization in Schema.org?

Usually Organization represents a company itself (school, NGO, corporation, club, etc.) whereas a Brand represents a product or service. In many cases these may be the same, e.g. Adidas; but not always, e.g. Tylenol, a brand sold by the organization/company Johnson & Johnson.

So, which you should use depends on what you're writing about. If you are selling Adidas shoes then Adidas is the Brand, but if you're writing an article about the company's profits then Adidas would be the Organization.

The difference might become clearer for cases where the organization name is not identical to the brand name.

For example, consider the company Lenovo (Organization) which owns the brand ThinkPad (Brand). A specific ThinkPad product (Product) manufactured by Lenovo could be marked up like this:

<article vocab="http://schema.org/" typeof="Product">
  <h1 property="name">ThinkPad X60</h1>
  <div property="manufacturer" typeof="Organization">
    <span property="name">Lenovo</span>
  <div property="brand" typeof="Brand">
    <span property="name">ThinkPad</span>

If you want to display both, the manufacturer and the brand, you could of course use the same structure also in cases where the organization/manufacturer name is identical to (one of) their brand names. Albeit named the same, a brand and its owner are still separate entities.

To prevent the visible duplication, you could use meta/link elements to hide one of the instances (in the case of JSON-LD, this is not relevant, of course), or you could consider using both types together (but that might be problematic, depending on syntax/consumer).

If you want to provide more data about one of these entities, you have to consider what exactly you are talking about. For example, a Brand can’t have a PostalAddress etc. Given that the Brand type has only few properties defined, you can’t provide that much data about it anyway.