I suspect that this was broken by a change introduced in TS 0.9.5, which is described in the changelog as:
Overload resolution rules simplified
Description: Overload resolution now follows a much simpler algorithm.
When multiple overloads fit for a given call, we pick the first fit
rather than the trying to find the "best fit".
This means that code with overloads should now be manually sorted from
the tightest/more-specific overload to loosest.
The two overloads that are available are the following:
// in lib.d.ts
declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;
// in node.d.ts
declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeTimer;
Clearly, the first overload will always match everything the second one can match, so it will always be preferred so long as it is the first one considered.
In the case where there are two .d.ts files, as it is here, the order of files defines the relative order of overloads from them. Normally, lib.d.ts always comes first, so it gets the priority. However, if you manually reference it, and make sure that the reference goes after node.d.ts, then the latter will take priority and you will end up with the correct overload.
Doing this from command line is easy - just specify .d.ts files explicitly in the desired order. For a VS project, you can do the same with _references.ts, like so:
/// <reference path="Scripts/typings/node/node.d.ts" />
/// <reference path="C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\lib.d.ts" />
To avoid hardcoding the absolute path like that, you might want to make a local copy of lib.d.ts in your project in Scripts/typings/node, alongside node.d.ts.
You might also want to chime in on the discussion thread about this change on TypeScript forums, and share your experience with TS team.