I can explain the phenomenon. According to the source code, the page function is roughly equivalent to this:
#let page(body) = {
pagebreak(weak: true)
place.flush()
body
pagebreak(weak: true)
}
As a result, #page[#pagebreak(weak: true); Page page] becomes:
#pagebreak(weak: true)
#place.flush()
#pagebreak(weak: true)
Page page
#pagebreak(weak: true)
So there’re two pages.
This might be a bug, but I’m not sure…