Why does constructing this jsonb_array from two jsonb objects fail?
You have some characters after the "k2" in first query. And because of that it is complainig about invalid syntax.

select *,ascii(c) from unnest(regexp_split_to_array('''{"k1":"v1","k2"​:"v2"}''','')) as c;
 c | ascii
---+-------
 ' |    39
 { |   123
 " |    34
 k |   107
 1 |    49
 " |    34
 : |    58
 " |    34
 v |   118
 1 |    49
 " |    34
 , |    44
 " |    34
 k |   107
 2 |    50
 " |    34
   |  8204
 ​  |  8203
 : |    58
 " |    34
 v |   118
 2 |    50
 " |    34
 } |   125
 ' |    39


If you run your first query like this, it will work:

SELECT *
FROM ( VALUES
  (jsonb_build_array(
    '{"k1":"v1","k2":"v2"}'::jsonb,
    '{"k1":"v1","k2":"v2"}'::jsonb
  ))
) AS t(x);