AX.25 data is NRZI encoded (so inverse bits and then NRZ). I hand calculated the HDLC frame start byte and first few address bytes so the corr_est only triggers at the start of the packet. Seems to trigger but I had to lower the threshold down to .390.
I have a separate program I'm using to check for the bit pattern I'm sending (0xA5, 0xA5, ...). It checks against raw, nrz, and nrzi to see if the pattern is present. It's present in 2 bytes and the data after those 2 bytes is wrong but consistent - which I think points to a timing issue.
I think the fact that I had to reduce the threshold down to 0.390 points to the same issue as the bits not coming out correctly.