I found that something like this works for reading and writing using the em_eeprom flash write functions.
#define USRFLSH_BASE 262144 - USRFLSH_SIZE
#define ptr_userFlsh ((uint8 const *) USRFLSH_BASE)
The flash write function works fine with pointers to sram source and flash destination. It only gets messy if your application is a bootloadable like mine. You have to tell the bootloadable component the size of your user flash area. It must be at the top of flash. Also, very important, you can't write to the top row of flash or your application will crash on the next power on. The bootloader uses the top 64 bytes.