Update: packet captures show that the accounting packets are going out in this order
User Connects to AP1: Start Packet
User roams to AP2: Start Packet, Stop Packet.
If you look at the Session IDs for the packets then you can see that the Stop relates to AP1, but Checkpoint is ignoring Session ID and breaking the connection on Stop.