Hola,
Lee con detenimiento
www.php.net/session_register . Ahi pone que esta funcion solo sirve para meter en la sesion variables GLOBALES. Es decir, variables que se definen en el nivel superior del script. Es decir, las variables que se definen fuera de las funciones. Y tu estas intentando registrar una variable definida dentro de una funcion. Es decir, una variable NO GLOBAL. Solucion: pasate a $_SESSION. Aunque eso te obligara a cambiar todo tu script, pero asegurara que funcionara en versiones futuras.
Solucion "de parcheo": define la variable que registras como globla dentro de la funcion. Asi:
Código PHP:
function reg_error($tipo=""){
global $error_msg;
session_register("error_msg");
Mas info
www.php.net/variables.scope .
Y por cierto, no se si primero tienes que asignar el valor a la variable y luego hacer el session_register().
Saludos.