We have a cisco phone system setup successfully.
I am setting up a bunch of phones, of which, one keeps getting an data vlan ip address from the DHCP server.
I have factory reset the phone a number of times.
I'm assuming you mean the 7961 as I can't find any reference to a Cisco 7661 phone.
Sorry I'm not familiar with the methods used for Cisco's to automatically discover voice VLAN's but a temporary bodge - press settings, **#, then Network configuration, then Operational VLAN ID, and manually enter the desired VLAN.
Also it may be worth doing a factory reset prior to this - pull the power (or network lead if powered via POE), then hold down the # key and power the phone up. Keep holding # until the line buttons blink in sequence, then enter 123456789*0# and the phone should reset to factory settings, then pull needed files. (As you have a Cisco phone system, I'm assuming you have the correct DHCP option for your TFTP server set, as well as the relevant firmware and provisioning files on the TFTP server - if you factory reset without these you will end up with a useless phone).
If after a factory reset it still doesn't behave on known good ports, I would factory reset a known good phone on a known good port just to ensure VLAN wasn't set manually before opening a support case with Cisco.
I don't know what you are using as switches, but on catalyst the following configuration should help:
Another thing to look at IIRC: the Cisco phones are using CDP to discover the voice vlan and hop into it. While disabling CDP sounds interesting for security reasons, it may break the whole voice lan.