同じ更新操作で同じ「パス」の2つのことを実行できないため、エラーはほとんど意味します。使用している2つの演算子は、思ったとおりに順番に処理されません。
ただし、「バルク」操作APIまたは他の形式の「バルク」更新で取得できるのと同じくらい「シーケンシャル」でこれを行うことができます。もちろん、その逆もあります:
var bulk = db.coll.initializeOrderedBulkOp();
bulk.find({ "tags": 1 }).updateOne({ "$addToSet": { "tags": 2 } });
bulk.find({ "tags": 1 }).updateOne({ "$pull": { "tags": 1 } });
bulk.execute();
他に何も変更しようとしないという保証はありませんが、現在得られるものと同じくらい近いです。
複数のドキュメントを含む生の「更新」コマンドも参照してください。