I wrote an article that talks about the backgrounds, but in french : Section 9 : backgrounds
Using google translate, I can see that you've found most of the stuff I have
I have some other obscure features implemented that I'm not sure any of the original data uses. (For example, the only layer that must exist is layer1, layers 2, 3 and 4 are all optional and can exist in any combination, so you could have a field file with only layer 1 and 3 or whatever and FF7 would still load that correctly)
The way you search for texture pages seemed odd to me at first but I think it's more of a problem with the translation, the first two bytes of the header define if the page is present or not, and if it isn't you should go on to the next page. (And looking at the code, you seem to be doing roughly that, except you check specifically for 1, any value is actually okay as long as its not 0)
Oh and the non-paletted format is R5G6B5, not RGB5551