ALGORITHM=INPLACE does not mean lock-free, and the operation that needed a table rebuild took a metadata lock at the end anyway.
ALTER TABLE orders MODIFY status VARCHAR(32) NOT NULL,
ALGORITHM=INPLACE, LOCK=NONE;
-- ERROR 1846: LOCK=NONE is not supported.
-- Reason: Cannot change column type INPLACE.
-- which is the RIGHT failure. without LOCK=NONE it would
-- have run, taken a shared lock, and blocked writes for
-- the duration of a full table rebuild.
Specifying LOCK=NONE turns an unpleasant surprise into an error before anything happens, and it should be on every ALTER as a matter of habit. The metadata lock at the start and end of an in-place operation is the other trap — it is brief unless a long-running query is holding the table, in which case the ALTER waits and everything queues behind it.