Consider an example. Suppose we have a 2D  4x4 array  and we want sum of block I[1,1] to I[2,2] then form integral image the sum is
S = + I[2,2] --> (I[end_row,end_col])
       - I[1-1,2] - I[2,1-1]  --> (-I[start_row-1,end_row] - I[end_row,start_col-1])
       +I[1-1,1-1]  --> (I[start_row-1,start_col - 1])   
so for 2D no. of terms is 2**2 = 4 --> bit_perm
To sum up all these 4 terms I use binary numbers 00,01,10,11 where 0 indicates that start has to considered
and 1 indicates that end has to be considered.
Also, first permutation(00 or end_coordinates) will be positive, then we replace one of the coordinates with start coordinate and subtract. However some parts will get subtracted twice. These need to be added back (eg last permutation (11) in 2D case which is subtracted twice in 2nd line in  above example, is added back in 3rd line). 
Alternative explanation could be:
The bit permutations is used to keep track or 'corners of a (hyper)cube'.How?
 Imagine a unit 3D cube,  the corners or the cube are  ((0,0,0),(0,0,1), (0,1,0), ... (1,1,1) )(these are not permutations). When calculating the sum (integrating ) of the cube we only need to consider these corner points in case of integral image. Adding some terms (even permutations) and subtract others(odd)
eg + perm(000)--> replace none by start coordinate --> end point (say point(1,1,1))  
     - perm(001) - perm(010) - perm(100) --> replace one of the coordinates --> points on xy, xz, yz plane
     ...
    - perm(111)--> replace all by start cordinates-->start point  (say point(0,0,0))