dlasher i fixed mine the same way like you, but there is more nasty bug with DUAL GPU adapters. Fans there are -1.
So if you have 6 adapters with IDs 0 1 2 3 4 5 . 1 of them is DUAL GPU. Lets say last one.
0 1 2 3 4 are physical. ID 5 is the second GPU. ID 5 must be ignored for fan polling. For load, temp etc is fine.
I would love to see a dump of this (with
gpu_snmp.pl fan) if you can provide it. Since my rig only has two dual GPUs, I don't really know what this would look like in a mixed system. My dual 6990's report back two fan set points per card even though there is really only one attached fan.
I can give you few

First one. 4 physical, 4 dual
/usr/bin/aticonfig --lsa
* 0. 10:00.0 ATI Radeon HD 5900 Series
1. 04:00.0 ATI Radeon HD 5900 Series
2. 08:00.0 ATI Radeon HD 5900 Series
3. 09:00.0 ATI Radeon HD 5900 Series
4. 0c:00.0 ATI Radeon HD 5900 Series
5. 0d:00.0 ATI Radeon HD 5900 Series
6. 03:00.0 ATI Radeon HD 5900 Series
7. 11:00.0 ATI Radeon HD 5900 Series
* - Default adapter
gpu_snmp.pl fan
100
ati_pplib_cmd: execute "get" failed!
100
ati_pplib_cmd: execute "get" failed!
100
ati_pplib_cmd: execute "get" failed!
100
ati_pplib_cmd: execute "get" failed!
gpu_snmp.pl load
99
99
99
99
99
99
99
98
Second setup 6 physical, 2 dual
* 0. 01:00.0 ATI Radeon HD 5800 Series
1. 02:00.0 ATI Radeon HD 5800 Series
2. 03:00.0 ATI Radeon HD 5800 Series
3. 05:00.0 ATI Radeon HD 5800 Series
4. 08:00.0 ATI Radeon HD 5900 Series
5. 09:00.0 ATI Radeon HD 5900 Series
6. 0c:00.0 ATI Radeon HD 5900 Series
7. 0d:00.0 ATI Radeon HD 5900 Series
* - Default adapter
gpu_snmp.pl fan
100
100
100
100
100
ati_pplib_cmd: execute "get" failed!
100
ati_pplib_cmd: execute "get" failed!
gpu_snmp.pl load
99
99
98
99
98
99
99
99