Unforntunately Salesforce does not support Field History for OpportunityLineItemSchedules. A workaround would be to duplicate Salesforce's Field History object and update it using a trigger. (I have already done this for OpportunityLineItems). But, alas, triggers are not supported for OpportunityLineItemSchedules!
Fortunately, changes to an OpportunityLineItemSchedule revenue or quantity, deletions, and additions of records update its OpportunityLineItem parent. So there might be some hope.
An answer to a similar post as mine suggested querying all the OpportunityLineItemSchedule records associated with the OpportunityLineItem trigger.old in a on before update OpportunityLineItem trigger and then comparing them to the OpportunityLineItemSchedules records queried from trigger.new in an on after update OpportunityLineItem trigger.
To test that solution I wrote an on before update OpportunityLineItem trigger that builds a map of all the OpportunityLineItemSchedule records associated with the OpportunityLineItem records from trigger.old. I then print the map in the debug log.
I updated an OpportunityLineItemSchedule record and looked at the debug log.
Unfortunately the map shows the UPDATED NEW values from the OpportunityLineItemSchedule record not the OLD values.
Perhaps I am misunderstanding that solution.
Any insights on the solution above or how one would track field history for OpportunityLineItemSchedules would be appreciated.