What happens if you changefor(uint16_t i=0; i<strip.numPixels(); i++) {
to for(int i=0; i<800; i++) {
You may be doing some extra 16/32 bit conversions ?
The WS2812 strips I have used were all 3 conductor rather than 4. Never very large arrays, so I did not have to worry about extra power part way down the chain. I tinned the connector on each side and then soldered...