Maybe GetClientInfo works only with replicated (or with FCVAR_USERINFO flag) convars while QueryClientConVar allows you to check most client convars?
EDIT:
So, i think, better to use GetClientInfo for convars with FCVAR_USERINFO flag (ex. "cl_language", "cl_cmdrate" etc.)
and QueryClientConVar in every other case.
Also, i think QueryClientConVar uses callback because this function is delayed (like query to Database) and can return error.
while GetClientInfo can get prefetched (not sure 100%) values, so no callback needed.