Это потому, что когда сигнал назначается внутри цикла for, предполагается, что драйвер влияет на ВСЕ элементы массива (или записи). Это потому, что он не может определить границы цикла for во время разработки, так как это концепция времени выполнения. Это отличается от цикла генерации, где границы могут быть определены во время разработки.
Таким образом, вам нужно удалить цикл for внутри процесса или создать сигнал, локальный для цикла генерации, который назначен внешнему sig2. например:
gen_label : for gen_indx in 0 to 3 generate
signal local_sig : std_logic_vector(1 downto 0);
begin
process (clk) is
begin
if clk = '1' and clk'event then
sig1 (gen_indx) <= '1';
for loop_indx in 0 to 1 loop
local_sig(loop_indx) <= '1';
end loop;
end if;
end process;
sig2(gen_indx*2+1 downto gen_indx*2) <= local_sig;
end generate gen_label;