Hi,
Why do you need to daisychain them like [Master Out] -> [Slave In - Slave Out] -> [Slave In - Slave Out] ?
Why not just wire the output of the master to the inputs of the slaves? That way the delay between the master and all the slaves will be equal and there will be less overhead in each of the slaves.

Also, your code seems to read the ID but then it doesn't read the actual data.
I'd probably send equally sized packets each time, perhaps something like sync, ID, 8 bytes of data, checksum. The slave then waits for the sync, grabs x number of bytes into an array, evaluates the checksum and if OK checks the ID. If ID matches it acts on the data otherwise it does nothing.

Using interrupts or not highly depends on what else your program needs to do. If it just needs to sit there and wait for serial data, act on that data and then go back to waiting then you should be fine without using interrupts. But if your program needs to do other things and receive the serial data in the background then you probably need to use interrupts - and DT-Ints is a great way to do it.

/Henrik.