Brad, sorry for the long wait time -- I dropped this on the floor  
while I was out attending various trips.

It looks like the problem is my fault: when I updated ECJ's  
newIndividual(...) mechanisms, I neglected to change how the island  
model does reading/writing.  When an island writes an individual, it  
originally did so through writeGenotype() rather than writeIndividual 
(), to avoid having to write the fitness of the individual.  When it  
reads an individual, originally it (naturally) used readGenotype()).   
I changed that to newIndividual() to be consistent with the rest of  
ECJ but forgot to change writeGenotype to writeIndividual().  As a  
result one side was expecting a whole individual, including fitness,  
and the other side was just writing out the genotype.  That's why you  
were getting corrupted data.  I think.

For the moment, I've set both sides to read and write individuals.  I  
was considering making both sides just read and write genotypes, but  
I think that might be dangerous if people are adding funky stuff to  
their fitnesses.  So we'll be a bit less efficient for the time being.

Here's a revised version of IslandExchange.java, which I've also put  
out on CVS.