Let me generalize this question a bit more...perhaps that would help. When I read all of the entries in from the LDIF (and they have changetypes included), I get $entry objects that have values correctly populated in $entry->{"changes"}. But doing $entry->update($ldap) appears to do nothing to the actual entry in the directory.
I think $entry->update() has some magic behind it that only processes changes that have been made AFTER the $entry has been loaded. Can anyone weigh in on this?