I always used ORA_BLOB for images, and I've never used the ORA_RAW datatype, but I'll take a stab since nobody else has yet.
ORA_RAW, I think, is limited to 255 bytes column size, and ORA_LONGRAW is much bigger (2 gigs?). You can't fit a 20K gif in 255 bytes. Try using ORA_LONGRAW instead.
There could be other problems, but that seems like the most obvious potential issue. It might explain why your images seem truncated/corrupted when you select them out.