sounds strange from what you tell, but it appears to be a 10 years old database (at least). And there were plenty of bugs in the inventory / warehouse logic, and some additional changes to item application entries in the last 10 years. Application entries are used for 2 purposes:
Track which entry is applied to which. IAE’s don’t contain item tracking information (like serial no.), though.
Track the path value adjustments have to go for adjust invoiced item entries.
Analyzing IAE’s is tedious at best, it’s a human-unfriendly data structure. From what you describe, I can imagine a scenario where item tracking was changed on the item while entries have been already posted. Standard code would prohibit this (and bring inventory / warehouse users up in arms), so probably somebody has disabled these checks.
When item tracking codes (or the flags set in an item tracking code) change, though, it affects how NAV applies item ledger entries against each other. Depending on whether charge nos. / serial nos. are required by item tracking (and worse, warehousing, too), these fields will be filtered to find the right item ledger entry to apply to. The IAE’s are written after the fact, they have no say in how the application logic works. But they can royally fuck up the valuation.
What we did in the end (completely messed up inventory, with bad code changes, broken valuation chains, wrong remaining quantities and whatnot) was a “start from scratch” with archiving the current mess, deleting all transaction tables (of inventory), and re-starting with an initial post via item journal. It was quite an effort, but apparently we are clean (enough) now. We had to code lots of the required tools ourself and with additional help of a contractor, though.
When you intend to upgrade to a new release, I would recommend to do something similar and leave the inventory history in the old database.
We are in the process of replacing Navision as a warehouse inventory system. So when we upgrade it will be to have it as an accounts package only. The code is very customized I am finding so that doesnt help things!