...or (and this isn't my idea, someone else suggested it):
Create a high-speed timer at, say, 8MHz. Whenever I receive a incoming bitstream pulse, sample the timer and then reset it. The intervals will nicely bucket into 1, 1.5 or 2 ticks depending on the MFM transition type; figuring out which is a couple of comparisons. That will then feed my MFM decode state machine directly.
This avoids the need to maintain and synchronise the bitstream clock entirely. It'll naturally resynchronise based on the incoming bitstream and the margins are completely under my control based on where I put the bucket boundaries. It plays better to the Psoc5's strengths, too.
Just wander, did you try standard UART to read incoming data? Maybe the bitstream is stable enough?
I did look at the UART component, but AFAICT you have to have one start bit and at least one stop bit. I don't think (haven't found an actual confirmation yet, though) that my bitstream has these: it's just eight-bit byte groups one after another. And with the MFM encoding I think I would actually be needing to record 15-bit groups before doing the decoding...