Fejlen er stort set, hvad den betyder, da du ikke kan handle på to ting af den samme "sti" i den samme opdateringsoperation. De to operatorer, du bruger, behandler ikke sekventielt, som du måske tror, de gør.
Du kan dog gøre dette med så "sekventiel" som du overhovedet kan få med "bulk" operations API eller anden form for "bulk" opdatering. Inden for rimelighedens grænser selvfølgelig, og også omvendt:
var bulk = db.coll.initializeOrderedBulkOp();
bulk.find({ "tags": 1 }).updateOne({ "$addToSet": { "tags": 2 } });
bulk.find({ "tags": 1 }).updateOne({ "$pull": { "tags": 1 } });
bulk.execute();
Ikke en garanti for, at intet andet vil forsøge at ændre, men det er så tæt på, som du vil komme i øjeblikket.
Se også den rå "update"-kommando med flere dokumenter.