I think that this is basically because you could as well write:
integer(kind=4) :: arr(1)
and still have a perfectly valid Fortran code with an interoperable array arr. In such a case what should the compiler put in data->type? Why more CFI_type_int rather than CFI_type_int32_t or CFI_type_int_least32_t ? nvfortran/nvcc just decides that any integer(kind=x) with x=4 is described with CFI_type_int32_t in the descriptor, which is plain correct.
The weird thing is to have different CFI_type_* values that map to the same actual type, but they have maybe some good reason for that.