MySQL converting column of type TEXT to TINYTEXT truncates value at non-intuitive position, why?
There is essentially no good reason to ever use TINYTEXT.  And there are some obscure drawback.

If you are using utf8 or utf8mb4, then you may have "multi-byte" characters.  TINYTEXT is limited to 255 bytes.  VARCHAR(255), which is similar in many ways, is limited to 255 characters.

If your text is any any Asian language, then only about 85 characters can be stored in TINYTEXT.  For VARCHAR(255), a full 255 characters can be stored.

More

I agree that the ALTER is messing thing up in a strange way.  Here's a shorter example:

DROP TEMPORARY TABLE tmp;
create temporary table tmp (
    text_col text
) collate = 'utf8_general_ci' engine = InnoDB;

insert into tmp
    (text_col)
values
    (repeat('a', 257)), -- 1 byte/character
    (repeat('ア', 86)); -- 3 bytes/character

SHOW CREATE TABLE tmp\G
SELECT text_col, length(text_col) FROM tmp;
alter table tmp
    change column text_col text_col tinytext;
SELECT text_col, length(text_col), HEX(text_col) FROM tmp;  -- Strangly truncated
SHOW CREATE TABLE tmp\G


The HEX comes back with the first two bytes of Katakana 'A', which is E382A2, so I will guess that the ALTER did some kind of modulo -- picking (258 % 256 == 2) bytes to keep.

Fails for me on 5.5.43, 5.6.22 and 8.0.2.  On the other hand, MariaDB 10.0.28 and 10.3.7 complain about the ALTER:

mysql&gt; alter table tmp
    -&gt;     change column text_col text_col tinytext;
ERROR 1406 (22001): Data too long for column 'text_col' at row 1


File a bug at bugs.mysql.com.