A SystemBlock (also a CompositeBlock) is created temporarily on enforcement, and is not stored in the database. These blocks are created in BlockManager::getUserBlock.
The block reason for this type of block is a message, which is translated in BlockManager::getUserBlock at the point when the block is created. If Block::getUserBlock is called before the user is initialized (e.g. T180050, T226777), the message is translated into the site language rather than the user's language, and a recursion warning is logged.
The block reason could instead be stored as a message key, and translated when it is needed.
(For some types of system block the same applies to the blocker, but the solution is a little more complicated - see T227005.)