## JavaScript (ES6), 84 bytes

    a=>(l=a.length)&&!(l&l-1)&a.every((e,i)=>i?(j=i&-i)<i?e=a[j]*a[i-j]:e==1|e==-1:e==1)

Explanation:

 - The length cannot be zero
 - The length must be a power of 2
 - The first element must be 1
 - Elements in positions that are a power of 2 must be either 1 or -1
 - Elements in other positions are the product of all the elements in the positions corresponding to the bitmask, e.g. `a[22] == a[2] * a[4] * a[16]`. Since `a[20] == a[4] * a[16]` has already been checked, only `a[22] == a[2] * a[20]` needs to be checked.