The ProcessMisplacedControls method is not related to invalid markup. It is always called and is related to the logic of assembling the controls of the page. So, there is nothing wrong with it.
Are you using custom layouts or custom controls? Do you remember what you changed in the template before it gets broken?
Maybe you could try to change the template of the pages to a different one and reorder the controls manually? The template is not stored as markup and is deep in the database, so manual fix would need very good understanding of the database relations.
Well, a template is not supposed to break in the first place. Everything is stored in the database and we use an ORM library so it is not a simple thing to see why a template is broken. We can do it, we have the source code and all the understanding of the DB relations, you may be able to do it somehow, but it's not something that is supposed to be doable by third party. Frequent backups are always recommended.
Anyway, I wasn't able to reproduce the problem, but I reviewed the code in the method that throws the exception. I changed something that could probably cause this, this change will be available in the Q1 release.
I hope that this helps and I am sorry for the inconvenience.