meanwhile I'm trying to deprecate the signon buffers in FTE (signon buffers only work if all clients use the same protocol).

MSG_INIT is always an issue.
but that's offtopic.
Anyway, it depends how big your map is.
with tiles you can have some special tile=255 marker to mark unknown, and have the client send a request off to the server for all the tiles in some screen-sizedish block whenever you encounter it, then you'll not stall while waiting for the entire map right at the start. Maybe set all 255s to 254 in the block once a request has been sent for that block, and fill them in when they arrive.
The biggest issue with queries is what to draw while you're still waiting for the result of those queries. When teleporting, this can be a major issue.
If you dynamically change the tiles mid-game, the prespawn/signon buffers are static and thus not suited to this. Queries should still work, assuming all replies/updates are sent over the reliable channel, thus ensuring that they're all properly synced and ordered correctly. You'll have to notify the client about every tile which is changed, but you should not need to track what the client thinks the tiles are, if you're broadcasting all changes reliably.
.