As written the number of $16 is variable because it's a synchronization pattern, technically you could have many of them, it just happens that 3 is the minimum that still gives readable data.
The rest is consistent.

I've thrown this onto the wiki, which I think matches the exposition given above plus some detail on the actual waveform and a brief mention of the hardware/software implementation. Hopefully it's accurate but if not then, well, it's a wiki. So easy to fix.

In an old discussion about it, we establised that the Oric ROM actually needs four $16 at the beginning of the file. 1st one is used to synch the signal decoding, the 3 next to confirm it's the header synch sequence.
That's funny because for a long time I thought the Oric synchronised its reading speed according to the tape player speed, but actually no: it synchronises the byte decoding, passing bits to start at the right one to decode the next byte.

Also, I wonder if there are no specific values for commands like STORE.

I've updated the wiki page to say four rather than three but otherwise I think we're of an understanding: the Oric decides how quickly the tape is running, and whether encoding is slow or fast, just by inspective the waves as detected. Is that what we both think?

Aha, sorry when I was talking about "speed" in my old (and wrong!) synchronisation understanding, I meant the tape player speed which can vary a little form one player to another! In my youth I thought the synch header was used by the Oric to adapt itself to a tape that was played 5% faster for instance - which is absolutely not what's happening

About fast or slow encoding/decoding speed, it's the human being that decides the decoding speed, by adding ",S" or not after CLOAD Thankfully by ear we can recognise a slow or fast recording!

Back in the days when I had a real Oric Atmos, I always thought that it would have been better if the tape header was always saved in SLOW format with a flag in the header to say whether the main program/data was FAST or SLOW format. That way when using CLOAD the ',S' parameter wouldn't be needed.