I have delved into the sortable widget to explore what's going on, and I've gotten familiar with why it does this.
The first time the sortable is created, it finds a list of child elements to sort, then binds data to the element which is used to sort the element.
When you fire off the refresh() function, it does not remove the data that was added to the original elements.
Using a copy of the latest revision of jquery.ui.sortable.js from github, I added the following hack into the top of the _refreshItems() function:
- // remove target checking data
- this.element.find(':data(sortable-item)').data('sortable-item', null);
This 'hack' makes sense to me, what you think?