A number, but not all, of the unicode-math
definitions are performed at \begin{document}
. In particular \emptyset
is defined to be \varnothing
early on, but the definition of \varnothing
occurs at the start of the document body. Moving the definition of the glossary entry out of the preamble circumvents the problem.
Other ways to deal with this include
issuing \glsnoexpandfields
before the definition
adding \protect
to the glossary entry
\newglossaryentry{symb}{name={$\protect\emptyset$}, description={description}}
providing a temporary definition of \varnothing
in the preamble, e.g. \let\varnothing\relex
just after \usepackage{unicode-math}
The first approach suggested by the glossaries author Nicola Talbot is the simplest approach for entries in the preamble. (According to the documentation it should be unnecessary, as that states that the name
field is not expanded by default, but your example shows that expansion is occuring.) egreg suggested the second approach which is good for a one off entry. The final approach is what I originally suggested; I would not recommend this as a general practice, but it does demonstrate exactly where the problem lies:

\documentclass{article}
\usepackage{unicode-math}
\let\varnothing\relax
\usepackage{glossaries}
\newglossaryentry{symb}{name={$\emptyset$}, description={description}}
\makeglossaries
\begin{document}
$\varnothing$, $\emptyset$, \gls{symb}
\printglossaries
\end{document}