Pienso que #byte es tratado como un ALIAS a esa direccion. Supongamos
#byte var = 0x6
Cuando use var en alguna instruccion va a suplantar ese valor directamente. En C suponete que tenes:
var = 10;
Esa instruccion solo haria que guarde el valor en 0x6, sin previamente pasar por nada. Funciona como un puntero.
En ASM verias que se carga el valor 10 en W y luego lo pone en la direccion 0x06.
El puntero por su parte ocupa espacio fisico, si el puntero es constante sera en la FLASH y si no lo es sera en la RAM.
Puede considerarse de 2 formas. Si es const, el compilador puede interpretarlo de la forma que explique el #byte, esto ocurre en C++ por ejemplo y no reservaria lugar en la FLASH, pero en C usualmente este puntero se guarda en la Flash, sin optimizaciones va a hacer que el programa busque el valor del puntero lo cargue en los registros para determinar a donde debe guardarlo, ya que el compilador no conoce el valor de ese puntero ni le interesa, asi poder tratar a todos los punteros por igual.
En caso de que no sea constante, existe la posibilidad de cambiarle el valor, y eso indica que debe tratarse de forma general por lo cual hay mas pasos involucrados tal y como lo dije antes.
Si queres sacarte la duda podes subir un .hex con un ejemplo muy simple ( sin ningun agregado ) en el que uses #byte y luego uses un puntero, para ver la diferencia que genera el compilador.