Problems with structures and unions in c
In order to integrate the union in the struct typedef, you need to use modern standard C. In the C11 version of the standard, anonymous unions/structs were added as a feature. With a standard C compiler you can do this:

typedef struct {
    unsigned char   SOAKTEMP;
    unsigned char   SOAKTIME;
    unsigned char   REFLOWTEMPERATURE;
    unsigned char   REFLOWTIME;
    unsigned char   BAKETEMP;

    union
    { 
      unsigned int  BAKETIME;
      struct
      {
        unsigned char BakeTimeLowbyte;
        unsigned char BaketimeHighbyte;
      };
    };

    unsigned char   COOLDOWNTEMPERATURE;
    unsigned char   COOLDOWNTIME;
    unsigned char   KP;
    unsigned char   KI;
    unsigned char   KD;
    unsigned char   CYCLETIME;    
}EEPROM_DEFAULTS;


You can now either use BAKETIME, BakeTimeLowbyte or BaketimeHighbyte as if they were 3 different struct members, even though they refer to the same 16 bit word.



However, this code is slightly problematic as you enforce the processor endianess upon your struct. If the code is only ever going to run on a Little Endian PIC, this is perhaps acceptable. But suppose you want to do the same thing with a struct that describes a data communication protocol. The sender, the network protocol and the receiver may all differ in endianess.

Therefore it would actually be better to keep the 16 bit integer from the initial code, then access individual bytes like this:

unsigned char hi = (unsigned char) (eeprom.BAKETIME &gt;&gt; 8);
unsigned char lo = (unsigned char) (eeprom.BAKETIME &amp; 0xFF);


This code is endianess-independent and portable.



General good advice / code review:


This struct and the union may have padding bytes inserted anywhere inside. Padding is never an issue on 8 bit MCUs, but on most other systems. You might want to protect against unintended padding by checking that the struct size is correct, using a static_assert.
Avoid the default types of C, since they are non-portable and sometimes come with various nasty side effects such as implicit type promotion. Instead of unsigned char and unsigned int, use uint8_t and uint16_t from stdint.h
Remember that the variable instance of the EEPROM_DEFAULTS struct must be declared as volatile, since the EEPROM might be changed at any time.