I think I may have further narrowed the problem..or found another glitch with a workaround.
PC version for me btw.
I did as a previous poster suggested and saved right after dismounting the dragon to save time experimenting/reworking. Miraak would go ethereal whenever I would get him to under 25% (ish) health...then he would absorb a soul from a dragon but stay ethereal and freeze up. HOWEVER, if I killed a second dragon, he would absorb that soul and heal to full. He would then proceed with the fight as normal. But, once down in health again, he would go ethereal, absorb the last dragon soul, and then stay ethereal.
Here was my workaround that did just fine in over twenty test runs. I didn't even bother to wait for him to finish speaking. I immediately targetted and killed one of the two dragons that landed on those arches. Then I fried Miraak (who went ethereal and blah blah blah). He would stay ethereal after absorbing one soul that he targetted. I then killed the dragon that i originally rode in on (since it was the only one that would get close enough for me..had to make sure that was not one that I killed for that reason.) He would then absorb the second soul and I killed him just fine to finish the quest afterwards.
My guesses would be as follows:
1> The soul absorption heals for a maximum amount. Him coming out of the ethereal state is only triggered from max health. So by doing too much damage he cannot fully heal to come out of that state.
2> The random soul absorption by Miraak is not properly toggled for the final fight and still happens as before entering the book for this fight. This would once again cause him to not fully heal through absorbing a dragon soul and leave him ethereal.
I killed him in a matter of seconds in each attempt...and my solution has worked just fine for me each and everytime. Saving first is recommended just in case.
I can't say this will work for everyone, BUT, I do hope it helps.
good luck