The data binding system is smart in that it
maintains a reference to the nodes it produces in the dom, based on the data model. Unless your items physically change location in the array, they will be left intact in the DOM. Only the minimal changes you make to the item's model will be changed in the DOM.
One thing you can do is maintain the origin array as the source of truth, and setup a parallel filtered/sorted version of the array that you template repeat over. Filter example:
<template repeat="{{item, i in filteredList}}">
this.filteredListed = this.list.filter(function(item, i) {
return item.category == 'special';
});
Polymer also supports inline functions/filers now, so you could do something like this:
<template repeat="{{l in sort(list)}}">
created: function() {
this.list = [6,5,4,3,2,1];
},
sort: function() {
this.list.sort();
return this.list;
}