I'm really glad you confirmed my conclusion about the false tag placement. I've been debugging this for so long, I stopped trusting any of my own conclusions. I'll write a block that picks the tag with the highest corr value and that should take care of it for my purposes. Thanks for the motivational boost!
I'm not using a Barker code, because they are so short. I'm using a 106 bit pseudo random sequence that does produce a nice big peak.
I'm using a power squelch to protect the synchronizers from tracking noise, which can make synchronization take longer if they go off into la la land and have a ways to come back. I realize that the correlation estimator would make that a non-issue if it's tag estimates were correct. I don't have enough confidence in the block yet to trust it. It's been weeks of banging my head against the wall thinking this block is the source of my problems. I'm still not even sure it is.
I used ctrl ports to profile the feed forward AGC. It was by far and away the most processor intensive block in my modem with a block size of 1024. That's not a big deal if the computer can handle it, but I found it was causing D's to creep up after a little time. The flowgraph couldn't keep up with the sample rate of the USRP. I'm only using a sample rate of 320k, so there isn't much lower I can go. With the AGC block there is no issues with D's and processing time. Using a block size less than 1024 proved no good for the modem. It would fail in other ways.