Here's a solution that certainly works for me on Blender 2.76b.
I believe your problem is that the driver values aren't propagating through correctly. I have had problems with certain drivers types in the past - for example, with drivers on values within materials. However, I have always had consistent results with drivers on Object Custom Properties and this forms the basis of this solution.
Start by creating your spotlight and add constraints to Copy Location and Copy Rotation to the camera. This will ensure the lamp always resides at the point of the camera.
Select the camera and go to its Object properties. Create a new Custom Property to drive the camera attributes. By using a property to drive the value (rather than manipulating the camera attribute itself) we can ensure we hook in to trigger our drivers whenever the property is changed.
Note : Ensure to include the decimal part of the property if you want it to remain a floating-point number when setting the property initial value - ie, '35.00' rather than '35' - otherwise you will lose the ability to set it to fractional values.
If there are multiple camera attributes that you would want to adjust that would each affect the camera viewing angle then add multiple properties - one for each attribute. In my example I am only adjusting Focal Length, hence only one property 'focallength'.
Right-click the camera attribute (in my case Focal Length) and Add Driver.
Swap to a Graph Editor window and set up the driver so that it has a variable of type Single Property with Prop set to the object Camera and Path set to ["name_of_property"] - ie, in my case '["focallength"]. Set the Driver Type to 'Scripted Expression' and the Expression to 'var'.
Now, varying the value of the Property 'focallength' should automatically adjust the camera's focal length.
Note : Cycles provides different sets of Custom Properties for different aspects of each object - for example, in the Camera properties there is also a Custom Properties tab. It's very tempting to use these properties rather than the main 'Object' properties - since when adjusting the camera attributes they'll be closer to hand. However, I have found that those properties do not play as nicely with drivers as the Object properties so they are generally best avoided. By all means give it a try - your version of Blender may well handle it better - but bear in mind that if the driver values are not propagating properly that that could be a cause.
Now for the lamp. Select the lamp, got to its Lamp properties and Add Driver to its Size.
Swap to the Graph Editor again and find the driver. Again, in the Variables section we need to add our Camera Property as a Single Property set to '["focallength"]'. This will ensure that the driver is triggered on change of that property.
However, in the Scripted Expression expression, instead of using the variable (var), set the expression to take the camera angle directly from the camera. This will set the lamp Size to the same angle as the camera whenever the 'focallength' property changes.
Note : If you want to be able to alter multiple camera attributes - eg, Focal Length, Sensor Size, etc. - then simply add multiple Custom Properties, one for each. When setting up the driver on the lamp add multiple Variables - one for each property. This way, whenever any camera attribute is amended (via the property) it will also trigger the driver on the lamp to capture the camera angle.
Now adjusting the camera (via its custom properties, not the driven camera attributes - note the property at the bottom-right of the following image) should propagate the angle to the associated lamp (note how the lamp in the top-left window always matches the camera width).
Note : My particular version of Blender only supports circular lamps - the same principle applies to non-circular spot lamps.
Blend file included