I think the problem is that (from Mma 7 documentation),
BaseForm acts as a \[OpenCurlyDoubleQuote]wrapper\[CloseCurlyDoubleQuote], which affects printing, but not evaluation.
One may have to implement the conversion using a formula. The following is my solution which does the job for hex >= 0. Most of the code is just annotation with 5 lines that do any real work. Even those lines can be wrapped into one another to create a more concise function, probably at the cost of readability.
(* iabraham, Mathematica 7.0.1.0, Win-7-64b *)
Clear["Global`*"];
h2d[hex_] := Module[{dictionary = { A -> 10, B -> 11, C -> 12, D -> 13, E -> 14, F -> 15}},
{(* Begin Module body. *)
(* Convert the hex into its digits, and replace A, B, C.... with decimal values
from the dictionary. *)
stringInHex = Characters[ ToString[hex] ];
valuesInHex = ToExpression[stringInHex] /. dictionary;
(* Debug print. *)
(*
Print[ "String in hex = ", stringInHex];
Print[ "Values in hex = ", valuesInHex];
*)
(* Generate the weight-table based on length of hex digits. *)
weights = Table[ Power[16,i],{i, Length[valuesInHex] - 1, 0, -1}];
(* Debug print. *)
(*
Print[" Weights list = ", weights];
*)
values = ToExpression[valuesInHex] weights;
decimal = Total[values]
(* End Module body. *)}
(* End Module. *)]