I would guess it has to do with the difference between the visual and logical tree. The control is in the logical tree but maybe the template for this control has not been applied yet and therefore FindName won’t return anything useful.
You could try to call ApplyTemplate(); on the container first.
This would also explain why it returns something sometimes.