Условный оператор, который сравнивает имена xml-объектов тут явно лишний, т.к. возвращаемые объекты имён у них в любом случае будут разные, значит это условие никогда не выполнится, как следствие данные никогда не обновятся
Добавлено через 4 минуты
хотя нет, извините, всё правильно, я просто не обратил внимание на переменные, которые вы объявляете внутри цикла
Добавлено через 15 минут
Незнаю насколько это будет проще, но по некторым источникам цикл while в обратном порядке выполняется немного быстрее чем for прямом порядке, и ещё один момент: будет эффективнее если длину массива запросить единожды чем кажды раз. Хотя мне думается что это такие незначительные нюансы, которые не особо важны.
Например так:

Код AS3:
private function refreshXML(basicXML:XML, update:XML) : XML
{
var i:int = basicXML.children().length();
var j:int;
var basicNode:XML;
var updateNode:XML;
while (--i > -1)
{
basicNode = XML(basicXML.children()[i]);
j:int = update.children().length();
while (--j > -1)
{
updateNode = XML(update.children()[j]);
if (basicNode.name() == updateNode.name())
{
basicXML.replace(basicNode.childIndex(),updateNode);
}
}
}
return basicXML;
}