Why are you using BOX_TO_WORLD-value if you are using a camera?
You are rendering the box2d-world with the same camera as you do it with your sprite.
sprite.setPosition(BOX_TO_WORLD * bPlayer.getPosition().x - sprite.getWidth() / 2,
BOX_TO_WORLD * bPlayer.getPosition().y - sprite.getHeight() / 2);
Just remove BOX_TO_WORLD.
1. you zoom in
2. render box2dworld
3. modify the position with BOX_TO_WORLD value
4. render sprite
-> can't work, the camera already did it for you, step 3 isn't needed.
think of a straight line in a coordinate system.
y = x
What you do is y = BOX_TO_WORLD*x
-> if(box_to_world > 1) the sprite is more distant to Zero
-> if(box_to_world < 1) the sprite is closer to Zero
In my opinion there is no reason for a BOX_TO_WORLD value, if you want a smaller box2d-world use camera and zoom in and it will look the same.
I know that a lot of tutorials are using such values, but I don't agree with them.
hope it helps