It is last write wins at the block level. The unit of granularity is a property on a block, for example the entire text in a paragraph of text or the type of a block.
For moving or adding blocks in lists, the operation is "place after object id XXX", so there are a few edge cases where someone else deletes or moves the block right before the target location. If the preceding block is missing from the list, they place the moved/new block at the end. (There is also a 'listBefore' operation that is used at the beginning of the page.)
If you're online, the rough edges are plastered over a little by timely updates, but working offline would amplify them a bit.