Your column is limited to both 2048 characters and 4000 bytes. Regardless of your character length semantics, ALL_TAB_COLUMNS.DATA_LENGTH is "Length of the column (in bytes)". AL32UTF8 can use up to 4 bytes per character, so DATA_LENGTH will be the number of characters * 4. Except it will never be larger than the Oracle limit of 4000.
For example:
create table test1(a varchar2(1 char));
create table test2(a varchar2(2 char));
create table test3(a varchar2(1000 char));
create table test4(a varchar2(4000 char));
select table_name, data_length
from all_tab_columns
where table_name like 'TEST_';
TABLE_NAME DATA_LENGTH
---------- -----------
TEST1 4
TEST2 8
TEST3 4000
TEST4 4000
You can fix your problem with alter table xxx.yyy modify zzz varchar2(4000 char);
.