I know what the problem is.
ItemHangingEntity doesn't take arbitrary classes. It looks like it does, but it doesn't:
/**
* Create the hanging entity associated to this item.
*/
private EntityHanging createHangingEntity(World par1World, int par2, int par3, int par4, int par5)
{
return (EntityHanging)(this.hangingEntityClass == EntityPainting.class ? new EntityPainting(par1World, par2, par3, par4, par5) : (this.hangingEntityClass == EntityItemFrame.class ? new EntityItemFrame(par1World, par2, par3, par4, par5) : null));
}