So, I downloaded your code and mucked about with it, and did some searching online and found that scheduling the tick did the trick. Here is the relevant code:
I altered the code to generate glass so I could tell if it was working or not, but it should work with your portal as well.
Something I don't know is if it checking every tick is a bad idea or not. You might want to update your code to be smarter about rescheduling the tick, like having blocks only schedule a new tick if there is any cloud block next to it, or having the portal frame check be able to work for any block in the frame, instead of just the corner.
Anyhow, cool idea and it works instantly this way, not needing a surface under it and being able to hang in mid air.