O erro deve ser nessa linha:
copia(origem, dest);
Porque você declarou a função com a matriz com ponteiro para ponteiro e tá passando a matriz do tipo m[][].
Assim ou você declara a função com o tipo [][], ou você declara no main um ponteiro para ponteiro, aloca memória e atribui os valores.
Se for utilizar matrizes de dimensão arbitrária então tem que usar matriz dinâmica, se for matriz fixa então usa o tipo [][].
Eu dei uma verificada no seu código.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void copia(int m[8][8], int n[8][8]){
int i, j;
for(i = 0; i < 8; i++){
for(j = 0; j < 8; j++){
m[i][j] = n[i][j];
}
}
}
int main(){
int i, j, a= 0;
int origem[8][8], dest[8][8];
for(i=0;i<8;i++){
for(j=0;j<8;j++){
origem[i][j] = a; a++;
dest[i][j] = -1;
}
}
copia(dest, origem);
for(i=0;i<8;i++){
for(j=0;j<8;j++){
printf("%2d ", dest[i][j]);
}
printf("\n");
}
return 0;
}
T+