\savebox is defined using \sbox and the latter is defined in LaTeX as:
\long\def\sbox#1#2{\setbox#1\hbox{%
\color@setgroup#2\color@endgroup}}
The text argument of \sbox is wrapped in a group \color@setgroup and \color@endgroup, when package color is loaded:
\def\color@setgroup{\begingroup\set@color}
\let\color@begingroup\begingroup
\def\color@endgroup{\endgraf\endgroup}
Additionally \color@setgroup sets the current color that is active, when the box is build. This is on purpose, because also other properties are fixed like the font. A box contents does not change in \textit or \textbf, neither the font family or size can be changed.
Colors are usually implemented by specials, then the following definition helps:
\makeatletter
\newcommand{\sboxcolorless}[2]{%
\setbox#1\hbox{\color@begingroup#2\color@endgroup}%
}
\makeatother
It is very, very important, that the argument is put into a group, here \color@begingroup and \color@endgroup, because #2 can contain \color commands, which automatically reset the color after the group.
If an explicit group is missing inside \hbox, the reset color special would leak outside the \hbox and the \setbox statement.
\documentclass{article}
\usepackage{xcolor}
\newsavebox\MyBoxA
\savebox\MyBoxA{Hello}
\makeatletter
\newcommand{\sboxcolorless}[2]{%
\setbox#1\hbox{\color@begingroup#2\color@endgroup}%
}
\makeatother
\newsavebox\MyBoxB
\sboxcolorless\MyBoxB{Hello}
\begin{document}
\textcolor{red}{Red \usebox\MyBoxA\ red \usebox\MyBoxB\ red.}
\end{document}

However, this trick depends on implementation of color. LuaTeX has a concept of attributes, where color can be much more closer implemented to font attributes. Package luacolor implements this. Then the elements, characters are attributed with the current color, when they are created. A reuse in a box will not change this. Therefore with package luacolor the example will look different, both "Hello" in black:

If you want to have more portability and flexibility, a macro can be used instead, where the control over the fixed properties is much larger:
\documentclass{article}
\usepackage{xcolor}
\newcommand*{\Hello}{%
\begingroup
\fontfamily\rmdefault % roman font, no non-serif or typewriter
\upshape % no italics, small caps
% but series (bold) or font size are flexible
Hello%
\endgroup
}
\begin{document}
\textcolor{red}{Red \Hello\ \textbf{bold \Hello} \textit{italics \Hello}}
\end{document}

This also works with all color implementations.
A note to XeTeX
The color driver xetex.def for XeTeX defines the color commands quite late via \AtBeginDocument. That means the color commands are not fully operational in the preamble. For example, \textcolor{blue}{...} inside a box will not work either, if the box is set in the preamble. If the box is saved after `\begin{document}, the box will work as in the cases with the other drivers.
\documentclass{article}
\usepackage{xcolor}
\newsavebox\MyBox
\savebox\MyBox{Hello \textcolor{blue}{World}!}
\begin{document}
\textcolor{red}{Red \usebox\MyBox\ Red}
\savebox\MyBox{Hello \textcolor{blue}{World}!}
\textcolor{red}{Red \usebox\MyBox\ Red}
\end{document}

The reason behind this "odd" behavior is that xetex.def wants to allow the user to disable the stack color implementation (maybe needed in some rare cases) via \noXeTeXcolorstack.
Workaround to enable color in the preamble:
\makeatletter
\check@for@XeTeX@colorstack
\let\check@for@XeTeX@colorstack\relax
\makeatother
\MyBox? E.g.,\savebox\MyBox{\textcolor{red}{Hello}}? When you use\savebox, LaTeX is creating the box at that moment; the\useboxjust prints it. So your color commands won't have an effect, because the box already exists and is already colored as it was when defined. – dgoodmaniii May 31 '15 at 02:43Hellois in red. – Z.H. May 31 '15 at 03:10pdflatexandxelatextypeset different results. If you could switch frompdflatextoxelatex, the problem will not exist any more! – Z.H. May 31 '15 at 03:23xetex.def, see my answer. – Heiko Oberdiek May 31 '15 at 04:16