I've fixed (and caused!) a few bugs like this in my time. FWIW here are some thoughts about it.
There's no evidence that the code that carries out trades is bugged. This suggests that the problem is purely in the code that creates or updates the "Last 5" list. I guess that when a trade completes, there's a bit of code that finds the correct "Last 5" list and updates it. It's possible that the lookup is wrong in some way. Perhaps its unique identifier is not as unique as expected or the code checks that the hash codes are equal instead of checking that the items are equal. The trading code must perform a similar lookup so playing spot the difference might find the bug.
Alternatively, the lookup might be correct but the "Last 5" lists might have been set up incorrectly to start with.
Finally it could just be something like an integer wrap around bug. I doubt it's a pointer bug because it seems too predictable but you never now til you find it.
Its seems quite likely that a lot of items in the AH are affected. Its probably just not that obvious for most things.
The good news is that it's very reproducible and it'll be easy to re-test when fixed.
I love trying to fix bugs like this. 🙂