I've had little to no issue with the I2C bus since I got my stuff working, and I'm running it from an mBed to 4 seperate atmega chips, a gyro, and an accelerometer all on the same line. So long as you are routing signals over short distances (within a couple of feet or so) you should be fine. My rule of thumb is to always have a 10k pullup resistor on the SDA and SCL lines for each device you have, so the resistance will decrease as the capacitance added increases. I would also recommend you stick to the Wire library rather than going to an external one as there is more support here on the forum, and outside little issues like this, it is quite robust.
Anyways, I don't know if you are still having trouble with your code but here is my 2 cents on it. Your main problem is that you did not include your array length in your Wire.write command. The syntax is void write(*char data, int length). So you are only sending 1 byte, thus the reason why only the last byte is sent as that is what the index pulls up first. Double check the reference page:
http://arduino.cc/en/Reference/WireWriteAlso why do you have a 10ms delay in the receiver? Essentially what is going to happen to your I2C line will be a really long pull-down of the SCL then a very rapid stream of data, I wouldn't be surprised if things got lost in that. The i2c request and receive functions are both run through interrupts, and generally you do not want to stick delays (especially of the ms variety, you could get away with micro delays) into interrupts as you want them to run as fast as possible.
There are other quirks and shenanigans in your code that you probably will have to debug out, but I think the issue related to the I2C bus is that you are sending a data array without specifying the data array length as the library wants.