Maybe not at the first sight but it is expected once you think more about this.

     assoc[[{"a", "b"}]] +=1

is

    assoc[[{"a", "b"}]] = (assoc[[{"a", "b"}]] + 1 )

and while *rhs* operation is still ok, the following one is not defined for associations (not counting generic assignment to values):

    assoc[[{"a", "b"}]] = <|"a" -> 2, "b" ->3|>

in case of `Lists` only dimensions play a role for threading but here key names also. There are `Merge` and friends for this kind of operations and by default it will just treat it as a single element *rhs* case, assigning association to each value.

Trace also makes sense:

    assoc[[{"a", "b"}]] += 1; // Trace

>     { assoc[[{a,b}]]+=1;
    , { assoc[[{a,b}]]+=1
    , { { assoc
        , <|a->1,b->2|>
        }
      , <|a->1,b->2|>[[{a,b}]]
      , <|a->1,b->2|>
      }
    , { assoc[[{a,b}]]=<|a->2,b->3|>
      , <|a->2,b->3|>
      }
    , <|a->2,b->3|>
    }
    , Null
    }