As Joseph said, the code is quite intricate. The bug should be fixed in the SVN (and probably in the next week or so on CTAN with the next update of expl3).
If you cannot wait, you can also redefine the offending function \fp_pow_aux_iv:. Only the end changes, but the function is massive.
\cs_set_protected_nopar:Npn \fp_pow_aux_iv:
{
\group_begin:
\l_fp_input_a_integer_int \l_fp_input_b_integer_int
\l_fp_input_a_decimal_int \l_fp_input_b_decimal_int
\l_fp_input_a_exponent_int \l_fp_input_b_exponent_int
\fp_ln_internal:
\cs_set_protected_nopar:Npx \fp_tmp:w
{
\group_end:
\exp_not:N \l_fp_input_b_sign_int
\int_use:N \l_fp_output_sign_int \scan_stop:
\exp_not:N \l_fp_input_b_integer_int
\int_use:N \l_fp_output_integer_int \scan_stop:
\exp_not:N \l_fp_input_b_decimal_int
\int_use:N \l_fp_output_decimal_int \scan_stop:
\exp_not:N \l_fp_input_b_extended_int
\int_use:N \l_fp_output_extended_int \scan_stop:
\exp_not:N \l_fp_input_b_exponent_int
\int_use:N \l_fp_output_exponent_int \scan_stop:
}
\fp_tmp:w
\l_fp_input_a_extended_int \c_zero
\fp_mul:NNNNNNNNN
\l_fp_input_a_integer_int \l_fp_input_a_decimal_int
\l_fp_input_a_extended_int
\l_fp_input_b_integer_int \l_fp_input_b_decimal_int
\l_fp_input_b_extended_int
\l_fp_output_integer_int \l_fp_output_decimal_int
\l_fp_output_extended_int
\l_fp_output_exponent_int
\int_eval:w
\l_fp_input_a_exponent_int + \l_fp_input_b_exponent_int
\scan_stop:
\fp_extended_normalise_output:
\tex_multiply:D \l_fp_input_a_sign_int \l_fp_input_b_sign_int
\l_fp_input_a_integer_int \l_fp_output_integer_int
\l_fp_input_a_decimal_int \l_fp_output_decimal_int
\l_fp_input_a_extended_int \l_fp_output_extended_int
\l_fp_input_a_exponent_int \l_fp_output_exponent_int
\l_fp_output_integer_int \c_zero
\l_fp_output_decimal_int \c_zero
\l_fp_output_extended_int \c_zero
\l_fp_output_exponent_int \c_zero
\cs_set_eq:NN \fp_exp_const:Nx \use_none:nn
\fp_exp_internal:
}
expl3. – Joseph Wright♦ May 31 '11 at 13:37