I think I may have sorted it! After checking virtually every wire and connection and finding nothing amiss, I checked the feeds to the fuel pump relay and found one dead. I bypassed the relay and the pump worked, but the engine still didn't fire. I realised that the pump does not prime when the ignition is turned on, but only when the engine is cranking. I turned my attention to the ignition relay and found that the control wire was only providing 0.5 volts instead of 12volts. This pointed to a problem with the ECU which I had already had professionally tested. However, with nothing to lose, I ran a hairdryer by it for about 5 minutes (it sits behind the centre console). I left it a moment, then cranked the engine and it fired up and ran sweetly. I tried again the following morning and nothing, so I tried the hairdryer trick again and it ran.
My solution: I took the ECU out and put it in the airing cupboard for a couple of hours, then placed it in a plastic bag with two sachets of silica gel. I put it back in its cradle, still in the plastic bag, plugged in the two connectors and sealed the bag and tried the engine to check it was still running. I tried it this morning after sitting overnight and the car started immediately. I tried again this evening after a very wet day and again it started.
I think I need to replace the ECU, but this fix seems to be working. Trouble is finding one. This car uses a GM ECU, which was unique to the 1.6 Punto and was always a bit of a rarity. To add to the rarity, it is a very early model which pre-dates the built-in immobiliser.