How does circular rebalance on LN work?
if your channel's are initially as you described (just depicted here again with better readability using total cpacity of the channel in brackets in the middle of the channel and the respective local balance on the side of the peer)
You -(200) --------[400] -------- (200) - Alice
You -(200) --------[200] ---------- (0) - Bob

And you create a circular rebalance of 100 sats the result schould (in an ideal world ignoring routing fees) look as follows:
You -(300) --------[400] -------- (100) - Alice
You -(100) --------[200] -------- (100) - Bob

Thus your total local balance should have stayed the same as the total capacity of the channels should not have changed. Of course you pay the routing fees for such an operation so in reality the result might look a little bit more like
You -(298) --------[400] -------- (102) - Alice
You -(100) --------[200] -------- (100) - Bob

This means that you had sent out 100 set to Bot Bob and others have probably decreased the amount to forwards a little bit so that you will only receive for example 98 on your channel with alice.
The situation that you discribe in which you magically have 500 sats instead of 400 can / should not happened with a rebalancing operations. Are you sure that:

noone sent you 100 sats on the channel with Alice at the same time
You did not earn 100 sats of routing fees on that channel with alice at the same time?

Thus I would kindly ask you to reproduce the operation..