In the case of the dynamic grid with input controls I had array of items with names for example ArticleItems.Description, ArticleItems.Description.
When I removed item 0 in the model, the element #1 became #0. but ModelState still contained both items 0 and 1, where item 0 is actually removed.
So, this code took value of ArticleItems.Description from ModelState and ignored value from the model. As a result the item 1 was displayed with value of the removed item 0.
Anyway, I think the value from the model should have precedence over the old value in ModelState.