Displaying entries with pagination on a category page where the entry's last category in the array is the current category
Found the solution, thanks to Aaron Berkowitz on How to get entries related to current category only (not children)

You need to exclude the entries related to the subcategories.

 {% if category is defined %}
 {% set dontInclude = [] %}
     {% for child in craft.categories.descendantOf(category) %}
        {% set dontInclude = dontInclude|merge(craft.entries.relatedTo(child).ids) %}
      {% endfor %}

      {% set str = dontInclude|join(', not ') %}


  {% if dontInclude|length &gt; 0 %}
    {% set params = params | merge({
      relatedTo: category,
      order: 'order ASC',
      id: 'and, not '~str
    }) %}
  {% else %}
    {% set params = params | merge({
      relatedTo: category,
      order: 'order ASC'
    }) %}
  {% endif %}
    {% endif %}

    &lt;!-- Get all entries by params --&gt;
    {% set blogEntries = craft.entries(params) %}

    &lt;!-- Paginate entries (9 per page) --&gt;
    {% paginate blogEntries.limit(2) as pageInfo, pageEntries %}
&lt;ul&gt;
      {% for entry in pageEntries %}
        &lt;li&gt;{{ entry.title }} ({{ entry.productCategory|join(', ') }})&lt;/li&gt;
      {% endfor %}
    &lt;/ul&gt;