Just to follow up on my own question, assuming someone finds this post via search some day:
I had 2 problems that prevented me from getting updates from my Ocelot:
1. In subroutine check_for_serial_data (in file mh), the first line is "return unless %Serial_Ports;". Well, this line is causing control to return before the rest of the sub is executed. I suspect that the ncpuxa interface is not a "real" serial port interface (its actually talking to xalib on a local TCP port instead), and as such doesn't get populated in the Serial_Ports list. I've commented this line out for now, and will investigate a better long-term solution later.
2. The Ocelot variable #15 must be set to '1' for it to output its TX/RX X10 commands. Stumbled across this by chance, re-reading the Ocelot manual front-to-back.
Since these 2 items were resolved, I've been successfully receiving X10 traffic in MisterHouse via the Ocelot.
Oh, and 1 more thing: receiving serial messages from the Ocelot (used to indicate I/O status changes) was periodically showing garbled text (the last char of the string repeated strlen times, to be exact). I fixed this in xalib in the file lib/cpuxa.c, function cpuxa_move_buffer(). This fcn is moving data within the same string backwards by 1 char, and memcpy() is not guaranteed to work correctly when the src and dst parms are the same. I changed it to use memmove() instead and its rock solid now.
Hopefully this will help someone someday in setting up Misterhouse - while the package seems quite powerful, its been a bear to set up.