Am I correct that you are deciding between ForAll(Patch()) vs. UpdateIf?
UpdateIf is able to update data for multiple records at a time that match the conditions. But today, UpdateIf is non-delegable, meaning it may not reach the records beyond 500 records.
The ForAll(Patch()) pattern is able to update one record at a time. But because it is one at a time (yet simultaneous), it is slower than the UpdateIf method. However, it is able to pinpoint the precise record to change. It is also delegable (provided that the conditions you use in the lookup are).
I am thinking that you're getting a mismatch for table/record with UpdateIf because of the part in red. When you're using ForAll, you are really accompanying your actions with the respective record that it's working on from an array. But UpdateIf is not running against another array.