Why is Target < Blockhash?
If you convert the difficulty bits to hex you will get:
0x1F00FFFF

Coefficient = 0x00FFFF

Exponent = 1F = 31

Target = Coefficient * 2**( 8 * ( exponent-3 ) )

Target = 0xFFFF with 31 - 3 = 28 trailing NULL (0x00) bytes

Target:
0x0000FFFF00000000000000000000000000000000000000000000000000000000

Your Hash:
0x000055f67563d1c2cb141d06d52d2fca63ef457c553519aeb635a2643a9af0b1

So your POW fulfils the target.
Just to be sure, you might want to check endianness during your conversions between int/literal/hex types.