In Epicor 10 there is a built in fix that might correct this but first run a BAQ against a few tables to confirm: Check PartDetail for any demand records and then compare PartWhse & PartPlant [Demand]Qty fields for any demand qty’s sometimes they seem to fall out of sync.
To fix you should be able to run ‘Refresh Part Qty’s & Alloc’ located under System Management > Upgrade/Mass Regeneration.
You would want to run this when nothing much is going on in Epicor as it’s recalcing and if there are a lot of transactions going on, it might adversely affect the recalc.
Also, you can first run it in report only mode and it will drop a log file for you to review and then you can run it in report & update mode.
Reply back if it helps or not.