It seems like I’ve discovered a pattern to this which may present a clue. If I create a new device in an application I get a join accept immediately on the first request, and then up-links come through consistently. If I then reset the device the second join request accepted and then up-links are consistent. If I reset again then the 3rd join request gets accepted and so on. Finally on the 8th reset (9th boot) we run out of channels and it never accepts my join request.
I’ve reproduced this behaviour multiple times now. I must be missing something with regards to how these joins work. Does the above behaviour indicate something?