It's supposed to work as you describe. If the date field the schedule is based on changes, salesforce is supposed to reschedule it. From the docs
If the referenced field value changes and the schedule hasn’t been processed, Salesforce recalculates the scheduled time for the actions using the updated field value. For example, a process emails an opportunity owner seven days before the opportunity close date. The close date is set to 2/20/20XX, and Salesforce schedules the email to be sent on 2/13/20XX. Before the email is sent, the close date is updated to 2/10/20XX. Salesforce recalculates the scheduled time and schedules the email to be sent on 2/3/20XX.
Hard to say why that's not happening for you. When I run into this sort of thing I try and create a very basic case of what I'm trying to do (i.e. schedule something, update the date field, see when it's scheduled). This helps me figure out whether it's something different with my workflow or if salesforce just isn't working. Either way if something isn't working I just try to find another way of accomplishing the same thing, and hope the alternate method works.