Given f (derived from the filter value) and q (given), you need to solve the following equation to get the cutoff frequency:

abs(H(f, q, w)) = -3.0 dB

where H is the filter transfer function and w is the normalized digital frequency (with 1.0 corresponding to the Nyquist frequency of 22050 Hz). In other words, the cutoff frequency will be 22050 * w.

For this particular filter, the transfer function is:

H(f, q, w) = f / (1 - (1 - f + q)*z + q*z*z)

where z is the point on the unit circle in the complex plane at angle -pi*w:

z = exp(-j*pi*w)

Quick python script to do the above:

Code
from cmath import *
from bisect import bisect
import sys

def transfer_function(f, q, w):
	zi = exp(-1.0j*pi*w)
	return f / (1.0 - (1.0 - f + q)*zi + q*zi*zi)

def bisection(func, x0, x1, TOL=1.0e-6):
	while abs(x1 - x0) > 2*TOL:
		x2 = (x0 + x1) / 2.0
		if func(x0) * func(x2) > 0:
			x0 = x2
		else:
			x1 = x2
	return (x0 + x1) / 2.0
	
def calculate_f(filtervalue):
	return ((((filtervalue & 0xFF) | 0x100) << 4) >> ((filtervalue>>8)^0x1F))/8192.0

def lpfcutoff(filtervalue, q):
	f = calculate_f(filtervalue)
	func = lambda w: 20.0*log10(abs(transfer_function(f, q, w))).real + 3.0
	return 22050.0*bisection(func, 0.0, 1.0) 

if __name__ == '__main__':
	argv = sys.argv
	argc = len(argv)
	
	if argc == 1:
		sys.stdout.write('Usage: python %s <filtervalue> [<q>]\n' % argv[0])
		sys.exit(0)
	
	if argv[1][:2].lower() == '0x':
		filtervalue = int(argv[1], 16)
	else:
		filtervalue = int(argv[1])
	
	if argc == 2:
		q = 0.0
	else:
		q = float(sys.argv[2])
	
	sys.stdout.write('%f\n' % lpfcutoff(filtervalue, q))