How do you update the dataProvider? If it is this
list.dataProvider = newDataProvider
Then the behavior you see is expected. From the List perspective, you have completely replaced the dataProvider and the List has no way of knowing if the old selectedItem/selectedIndex will still be valid. I think it makes the correct assumption in assuming that it is not.
Or do you update the dataProvider using the dataProvider's refresh method:
list.dataProvider.refresh();
In such a case the dataProvider's length could change; as could its elements. In this case a collectionChange event will be dispatched and the list should have a method to handle the collectionChange event. The List has no way to know whether the previous selected item will be in the new list; whether its index will change, or even if the old selectedIndex will still be valid. So, the selectedItem gets reset.
Generally to preserve the selectedItem/selectedIndex in either case, you should store a reference to it and reset it after the dataProvider change:
mySelectedItem = list.dataProvider.selectedItem;
// update dataProvider Here
list.dataProvider.selectedItem = mySelectedItem;
If you're just updating an item in the dataProvider; then the selectedIndex/selectedItem should not be affected.