I tried to reproduce the issue you highlighted above. When I update the most recent version, which is version 5, it shows the correct results, which is that only that version was updated with my change. I tried this with Sitecore 8.1.3.
Also I reviewed the code in the Sitecore.Client dll and I don't see any reason it would cause that issue either. Basically as it loops through the versions collection when the user clicks on the
OK button, it will do a conditional check to see if the value is set to Hide version or else the current unsaved to and from dates are different from the values entered. It will not compare seconds, just minutes and date information.
If you are still having issues and maybe you had slightly different steps to follow, than in this scenario, it's probably going to be best to reach out to Sitecore support.
However if you can't wait and need to solve this right away or hack it so it works, you can also optionally, override the command that is firing the dialog to load, and you can either use dotpeek to build a similar dialog to the one that is OOTB from Sitecore or you could rewrite their dialog.
To change the command that runs, you just need to patch the
type attribute to your own method from the line below:
<command name="item:setpublishing" type="Sitecore.Shell.Framework.Commands.SetPublishing, Sitecore.Kernel" />
That will fire off the dialog from that command method, the dialog code can be found in the front end interface located here:
Website\sitecore\shell\Applications\Content Manager\Dialogs\Set Publishing\Set Publishing.xml. You could obviously also update that file, but I wouldn't recommend that since it's not upgrade friendly.