I figured out why contractPrint is printing a zero for fVal. In my data, fVal represents delta which is bound -1.0 ... 1.0. In my dataset, only 4725 records out of 9613258 have delta either -1.0 or 1.0.

The contractPrint code (found in contract.c) casts the fVal variable to an int thereby rounding down (up) to 0 when -1.0<delta<1.0 which is the vast majority of my cases.

Code
void contractPrint(CONTRACT* c,int To)
{
	if(!c) return; 
	print(To,"\n%s,%s%s%s,%i,%.4f,%.4f,%.4f,%.4f,%i,%i,%s",
		ifelse(is(TRADEMODE),(char *)c,strdate("%Y-%m-%d",c->time)),
		ifelse(c->Type&FUTURE,"Future",""),
		ifelse(c->Type&PUT,"Put",""),
		ifelse(c->Type&CALL,"Call",""),
		c->Expiry,(var)c->fStrike,(var)c->fUnl,(var)c->fAsk,(var)c->fBid,(int)c->fVal,(int)c->fVol, // <--- (int)c->fVal
		ifelse(is(TRADEMODE),strcon(c),""));
}


This of course does not solve my contractFind issue...