Hi,
I didn't use you test data, but i have a strong suspicion the problem is related to the small number of rows. Probably InnoDB is choosing a full table scan for the range condition on the SELECT, as it covers most of the table. You are using repeatable-read, which requires that InnoDB hold locks in innosel for the duration of the transaction. Since InnoDB locks each row it traverses, a full table scan will lock the ENTIRE table, including the gap that represents 6, and the gap after 7.
If you want to lock only the rows that match, you can do so, kind of. Switch to READ-COMMITTED and if you are using binary logging, to ROW based logging. Under these conditions if more rows than necessary are scanned (thus locked) the rows that don't match the filter will be unlocked after the statement completes. Then insertion of 6 and insertions beyond seven can be performed.
Regards,
--Justin