For nodes rotate=<angle> rotates around their anchor, for everything else (?) it rotates around (0,0).
rotate around
But there is the rotate around=<angle>:(<coordinate>) style!
(As always, if <coordinate> contains a comma (,), you’ll need to enclose the whole argument in braces { }.)
In this case you want
\draw[|->|, rotate around={45:(3,0)}] (3,0) -- (6,0) node [midway,fill=white] {$3a$};
which will give you

transform shape
But you want to rotate the node’s text too?
My initial go-to is transform shape, but this has tremendous consequences.
For example if you use another transformation like scale=0.5 (or yet another rotation). Normally, the nodes do not get affected by this, but in this case, they would:

I suppose you won’t want this, right?
Therefore, I suggest the use of an extra style (or two to be precise):
rotate around with nodes=<angle>:<coordinate>
This style works like rotate around and thus forwards its arguments to this style. In addition it sets the \qrrNodeRotation macro to <angle>.
rotate with is a style that should only be used on nodes on a path that is used with rotate around with nodes.
Code
\documentclass[tikz,border=2pt]{standalone}
%\documentclass{article}\usepackage{tikz}
\tikzset{
rotate around with nodes/.style args={#1:#2}{
rotate around={#1:#2},
set node rotation={#1},
},
rotate with/.style={rotate=\qrrNodeRotation},
set node rotation/.store in=\qrrNodeRotation,
}
\begin{document}
\begin{tikzpicture}[scale=.5]% scale set to 0.5 for explanation %%%
\draw [step=1.0,thin,gray!40] (0,-3) grid (6,3);
\fill[blue] (3,0) circle (2pt) node [black,below left] {$C$};
\draw[thick] (3,0) circle (3cm);
\draw[|->|]
(3,0) -- (6,0) node [midway, fill=white] {$3a$};
\draw[|->|, rotate around with nodes={45:(3,0)}]
(3,0) -- (6,0) node [midway, fill=white, rotate with] {$3a$};
\end{tikzpicture}
\end{document}
Output

rotate around={45:(3,0)}instead ofrotate=45what you want? – Qrrbrbirlbel Jan 02 '13 at 05:52