The sleep code I have works with a jump from GRD to Pin 2.
What is jumping from ground to pin 2?
BUT it doesnt work from the PIR and I think this is because its not exactly 0v or 5v - is this the case and if so how do I fix it?
The PIR is a digital device. It outputs a signal that is HIGH or LOW. It should be connected to a digital pin. Determine whether HIGH means motion sensed or all quiet. Then, using either RISING or FALLING in the attachInterrupt() call to be notified when the device senses motion.
Any output from the device that is above 3.0V will be seen as HIGH. Anything lower will be LOW.
Does the PIR signal bounce around all the time, or only when movement is detected?
Are you sure that it is the PIR generating the signal that is waking up the mcu, or could it be interference? If you have long wires between the PiR detector and the Arduino, they may well pick up interference. Using screened cable and/or a lower value pullup resistor will help to avoid this.
You could slow down the PIR signal by adding a resistor between the PIR detector and the pin (around 2K to 4K) and a capacitor between the pin and ground. The mcu has hysteresis on the input pins, so it can cope with slowly-changing signals, although inputs that are not close to +5v or 0V do cause the current consumption in sleep mode to increase. You could also use the analog comparator to monitor the signal, if you choose a sleep mode in which the comparator can be enabled.