Correct, it never returns from ethernet.begin because it never finds the end of the packet before it goes loopy.
One difference between my home and office environ: At the office there is a redundant DHCP server. The DHCP request gets 2 offers from 2 servers. I wonder if somehow those two packets are in the buffer together and that is why the code thinks there is more data when there should not be. I wouldn't think that would be possible, but I've never worked this close to hardware before.
Unfortunately it would be difficult for me to filter out the 2nd server's offer, but I'm thinking when I get into the office tomorrow I'll dump the entire buffer and look at it to see if I see 2 offers in it.