EDIT regarding a bug in the promotion logic.
Try a test case:
@Test
public void whitePawnPromotionCaptureBlocked() {
state.set(5, 1, WHITE_PAWN);
state.set(5, 0, BLACK_BISHOP);
state.set(6, 0, BLACK_PAWN);
// In this position there is one move,
// which is Queen right
// Unless I am blind, this move is not generated.
}