Different results when using findOne and findOneAndUpdate (positional operator)

In my code, I perform a findOneAndUpdate but instead of changing the found item in the array, it only updates the first element. When the same query is done with findOne (printing out the item), I get the valid item that should be changed. My issue seems to be related with Positional operator issue but it persists even after I replace $in with $elemmatch or remove it all together (itemUsers: user._id)

Schemas: https://pastebin.com/JESPgSVe

findOneAndUpdate (updates the first array element instead of the queried on)
findOneAndUpdate(
      {
        itemId,
        itemUsers: { $in: user._id },
        reviews: {
          $elemMatch: {
            reviewId,
            reviewer:  user._id,
            $or: [
              { createdAt: { $lte: Date.now() } },
              { createdAt: undefined },
            ],
          },
        },
      },
      { "reviews.$.createdAt":  new Date() }
    )
  )

findOne (returns the specified query)
findOne(
      {
        itemId,
        itemUsers: { $in: user._id },
        reviews: {
          $elemMatch: {
            reviewId,
            reviewer:  user._id,
            $or: [
              { createdAt: { $lte: Date.now() } },
              { createdAt: undefined },
            ],
          },
        },
      },
      "reviews.$"
    )
  )