False reading when using direct port manipulation over xbee

Hello, I have had Arduino for a while but don't have much experience with Xbee and direct port manipulation. I am trying to send multiple readings from digital sensors between two Arduinos at a very high speed. I believe I am successfully packaging a set of readings and am sending them over between the Xbees, but have a problem when I write the readings to the output pins. For some reason all output pins go HIGH before taking the real readings.

For now I have connected all input pins on the "sender Arduino" to ground, and all output pins on the "reciever Arduino" are connected to LEDs. I have also intentionally slowed down the sketch speed for easier debugging.

The sender Arduino is Duemilanove w/ Atmega 328 and the receiver is Uno. Xbees are Series 1 with default settings. The code is as follows:

for the sender

// number of port readings to collect
const int numReadings = 15;
int counter = 0;

// count time to send message without delay
unsigned long previousMillis = 0;
int periodToSend = 8000;

// string holding message to send
String stringMessage;

void setup(){
stringMessage = String ();
Serial.begin(9600);

DDRD = B00000000; // set pins 0 - 7 as INPUT
PORTD = B11111100; // enable pull-ups on pins 2 - 7
}

void loop(){

// put multiple port reading in the string to send
if(counter < numReadings){

stringMessage = stringMessage + PIND;
counter++;

delay(500); // slow things down for debugging

}

// if we all readings are collected and time is right - send
else{

if(millis() - previousMillis > periodToSend){

Serial.println(); // newline before sending message
Serial.print(stringMessage);

// reset variables
counter = 0;
previousMillis = millis();
stringMessage = String ();
}
}
}

for the reciever

byte message;

void setup(){
Serial.begin(9600);
DDRC = B11111111; // set pins A0 - A6 as OUTPUT
}

void loop(){
if (Serial.available() > 0){

// newline indicates start of new message
if (Serial.read() == '\n'){

// get all input readings and send them to outputs
for (int i = 0; i < 15; i++){
message = Serial.read();
PORTC = (message >> 2); // shift 2 digits (D0 and D1)
delay(500); // slow things down for debugging
}
}
Serial.flush(); // clear the buffer
}
}

The result is that when all input pins are connected to ground the output LEDs flash for one duration of the PORTC loop and then go off, when any of the input pins are connected to 5V all leds flash for one duration of the PORTC loop and then the correct LEDs stay on. The flashing occurs every time when a new serial message is received.

Skipping the first Serial.read after newline does not help and in the X-CTU terminal all readings look OK. When all input pins are connected to ground I get the below reading (01 and 03 must be because of the RX and TX pins going high)

Any help would be much appreciated.

  if (Serial.available() > 0){

    // newline indicates start of new message   
    if (Serial.read() == '\n'){
      
      // get all input readings and send them to outputs
    for (int i = 0; i < 15; i++){
      message = Serial.read();

If one byte is available, read all 16 of them. Does that seem right to you?

If one byte is available, read all 16 of them. Does that seem right to you?

well... now that you mentioned it... it doesn't seem right at all.
many thanks, Paul!