The intention was that BLOCK works in the historical way. In historical systems, LOAD, LIST, THRU, and in fact everything that accesses blocks in any way used BLOCK and hence changed the block buffer cache. It has always been a usage requirement that you can't depend on holding pointers to previous calls to BLOCK "for long". To the extent that the standard fails to make all that explicit and misses some invalidation cases, it is an omission.
The committee didn't spend much time on BLOCK; it was seen as a "dead horse" and we had much to do on other fronts. So I'm not surprised that we missed some stuff. The new stuff was argued and nit-picked until we were exhausted, but the BLOCK stuff just sorta slid in with the expectation that anybody using it was already so familiar with it that they knew what to expect, and then it would die a gradual death.
Regarding the number of buffers: I don't recall ever having seen a system with only one block buffer. The need to copy one to another pretty much makes a one-buffer implementation impractical. The standard should make that explicit. Or better yet, get rid of BLOCK entirely, which was my preference during the initial deliberations. The "lifetime of a block pointer" issue is just too problematic for modern systems. (That said, I did actually use BLOCK as a factor inside some of my filesystem implementations - but it was a private implementation that was used only inside the filesystem, so the characteristics and usage patterns were controlled.)