BEGIN
  ...
  WHEN ANY
END
Откатится то, что под "...", внутри BEGIN..END

Не совсем так
Откатывается только один "целостный" оператор, т.е. блок

Для примера можно проверить (FB2.0):

execute block
returns(res varchar(255))
as
begin
 begin
--    begin
   insert into T2(ID)
   values(1);
   exception e_exc;
--    end
 when any do
   begin end
 end
 res = 'ROLLBACK!';
 select 'NO ROLLBACK!' from T2
 where ID = 1
 into :res;
 suspend;
end

Даёт 'NO ROLLBACK!', при раскоментировании внутреннего блока 'ROLLBACK!'

Не знаю баг это или фича, но наверное логичнее было бы если работал бы вариант указанный WildSery

Ответить