Resulta que "valor3" no tiene hijos. Cuando haces
 
Código:
 vari.getElementsByTagName("valor1")[0].firstChild.data;
  te devuelve la cadena "Si" porque "valor1" tiene un hijo, un nodo de texto. Entonces los nodos de texto tienen la propiedad 
data, que es el texto que contienen. 
Al no haber nodo hijo (ni siquiera de texto al no contener ni un espacio), no contiene propiedad 
data (ni siquiera sé que ocurre si sólo haces 
firstChild, dará undefined?). 
Bueno el caso es que hay métodos DOM como hasChildNodes() o childNodes.length para averiguar si hay o no hijos. Deberás mirarlo antes. Lo que quieras devolver en ese caso ya es cosa tuya (false, cadena vacía, null...).  
Un saludo.