Had to heavily modify the solution, but it's essentially doing the same in tldr. It works beautifully:
public static string ConvertHexToString(string str)
{
StringBuilder sb = new StringBuilder();
byte[] b = new byte[str.Length / 2];
for (int i = 0; i < b.Length; i++)
{
b[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);
sb.Append((b[i] >= 32 && b[i] <= 126) ? (char)b[i]: '.');
}
return sb.ToString();
}