Hi,
Following up on your question about a duplicate listener - you were right to ask. We found and fixed a real bug on our side, and the mystery is resolved.
Root cause: our test phone had more than one Flic button paired (from earlier testing). Our code guarded against re-registering a listener on the same button by comparing against a single "last processed button" variable. Since the list of known buttons gets iterated twice, through two separate code paths, the second pass would reach an already-registered button again - but by then that single-value guard had already moved on to a different button in the list, so the comparison no longer matched, and the listener got registered a second time on that same physical button.
We confirmed this precisely by tagging each registered listener instance with an incrementing ID and logging it on every callback: two different listener instances (not one instance firing twice) were both receiving every accelerometer burst.
We fixed it (now tracking a set of already-registered button addresses instead of a single last-seen button) and re-ran the exact same test as before (outputDataRate=1, samplesPerBurst=8). With the duplicate registration gone, we now see exactly 16 samples every ~10 seconds - matching your own measurement exactly. No rate doubling at all. The only real discrepancy left is the x2 size you already confirmed and are fixing in the packet writer.
Sorry for the noise, and thanks for pointing us in the right direction. One small, low-priority thing we noticed while re-testing: those 16 samples still arrive split across several small packets (e.g. eight 1-sample bursts, one 3-sample, one 5-sample) instead of a single 16-sample packet. Doesn't affect the total count or rate, just how they're spaced out - not urgent, just mentioning it in case it's a known/expected detail on your end.
Thanks again!