What does 'Cube Size' mean when using Cube Projection UV unwrapping?
Cube projection iterates over the mesh faces and for each does the following:


It considers the dominant normal axis of the face, and keeps the coordinates around this axis. For example if the dominant normal axis is X, the considered coordinates will be Y and Z. This is the 'cube/cube projection' aspect and this cube is fixed along the global axis (we'll have a flat projection on the world's axis).
Then it calculates U and V from the center of the UV Map (0.5) and adds 0.5 * (the parameter 'cube size') * (the object's location + the corresponding vertex location)


The code is the following:

luv-&gt;uv[0] = 0.5f + 0.5f * cube_size * (loc[cox] + l-&gt;v-&gt;co[cox]);
luv-&gt;uv[1] = 0.5f + 0.5f * cube_size * (loc[coy] + l-&gt;v-&gt;co[coy]);


So the result will depend on: the cube size parameter, the object's location (at 'object level') and the vertices location (at 'edit level').


BUT for the first vertex of the face, it calculates a rounding which will offset all the vertices of the mesh, using:

if (first) {
    dx = floor(luv-&gt;uv[0]);
    dy = floor(luv-&gt;uv[1]);
    first = 0;
}

And after that using the following for all the vertices of the face:

luv-&gt;uv[0] -= dx;
luv-&gt;uv[1] -= dy;



So the result may appear erratic as the way the rounding of the first vertex works does so, depending on the way the faces are organized (shared vertices between faces), some UV faces will overlap or not.

Once this calculation is done, the operator considers the two other parameters which are 'clip to bounds' and 'scale to bounds'.