Поскольку OSError является суперклассом WindowsError, просто перехватите OSError .
FWIW, разработчики ядра могут выдавать исключение, более конкретное, чем минимум, обещанный документами.
Кроме того, следующий код прекрасно работает для меня (Python2.7.2 работает на WindowsXP):
try:
raise os.rename('nonexisting_file', 'def')
except OSError:
print 'caught'