From a functional perspective there are no differences. From a security perspective there are. It is easier for a hacker to do XSS when you use single quotes (when the text within those quotes comes from an untrusted source, of course). However, I wouldn't bet on only double quotes. You'd better use proper encoding on that attribute value.
Update:
Here is an example with ASP.NET:
<input type='button'
value='<% = HttpUtility.HtmlEncode(Request["button"]) %>' />
Because of the use of single quotes, this code snippet is easier to exploit for a hacker. Here is an example. When you put the following text in the button
argument of the query string, you will have a successful* XSS exploit:
click' onclick='alert("xss")
as in:
mypage.aspx?button?click'%20onclick='alert("xss")
This attack wouldn't have been successful when we would have written the snippet with double quotes as follows:
<input type='button'
value="<% = HttpUtility.HtmlEncode(Request["button"]) %>" />
I hope this clears things up a bit.
*Of course, the newest browsers will detect this type of attack (which is called reflected XSS), but won't detect this, when this string didn't come directly from the browser (which is called persistent XSS).