Ваш первый пример может быть упрощен до:
double data;
unsigned char bytesReceived[sizeof double];
memcpy ( bytesReceived, &data, sizeof data);
Ваш второй пример недопустим: буфер
unsigned char bytesReceived[sizeof double];
не обязательно выровнен по «двойной» границе, поэтомучто приведение
newDblPoint = bytesReceived;
reconstData = *dblPoint;
попытается разыменовать невыровненный указатель.