All 4 channels are up and running now, and I've got the impedance measurement circuit put together but still haven't tested it. I also found a seemingly more stable way to start up the MCP (by starting each channel in shutdown mode, instead of soft reset mode before enabling them).
Visual electrodes are definitely picking up alpha in the below image, I'm not sure if the motor cortex electrodes are just making poor contact or if it's just hard to produce a detectable signal there, but getting the impedance measurement stuff worked out will help with that.
I also started to run into the limits of how fast my client code on the host computer could receive/process/display the channels. A quick fix was to only send the most significant 16 bits for each sample (since the least significant 8 bits of each sample are just noise anyway), which prevented the UDP receive buffer from overflowing. Probably plenty of other optimizations or compressions that could be done here or other network protocols to explore, I'm not very familiar with network protocols though so I'll probably stick with what's working unless I have to change it.