More info: when I initialize and enable the CAN transceiver on the KE06Z but do not transmit anything, and my other device is transmitting by itself, the waveform is correct--each bit taking 4 usec. As soon as the KE06Z transmits a single message--for example, the address claim message--the bit length of the other device's transmissions' bits is reduced to 3.54 usec, and each transmission causes a error frame (although that device's messages do continue to appear in the CANalyzer trace). So it's not something set wrong in CANalyzer, and it's something caused by the KE06Z's SendFrame() method or something associated with that message, since that's the only line I re-enabled in the KE06Z code.
Also, I discovered that the address claim message from the KE06Z will show up in the CANalyzer trace, if I leave the trace running as I start a new flash of the KE06Z. It's as if something in the beginning of flashing a new image into the KE06Z flushes the MSCAN Tx buffer. That first message sent is the only one that ever shows up, however, even if I've called SendFrame() with additional messages. My additional messages are sent to the other device on the CAN bus, but are not received (or not received correctly), since the device does not do what the message commands it to.
When I enable the external oscillator and force the CAN bus to use that, and transmit a frame from the KE06Z, the error frames still occur but the single bit length is now stretched out to 5.06 usec, and the bus is behaving badly, with the difference between CAN HI and LO jumping up for parts of the bits on. Again, if I only initialize and enable the KE06Z transceiver, with the timing set to use the external oscillator, but don't send anything, the bit duration in the messages from the other device is right where it should be at 4 usec.