I came across this technique in this article: http://staheri.com/my-blog/2015/march/custom-examine-indexing-using-umbraco-cache/ but I thought it was worth a separate write-up as I had been trying to figure this out for years.

Accessing IPublishedContent from a GatheringNodeData event handler is a bit tricky because the event args don't contain a reference to it, there is no reference to UmbracoHelper  or an UmbracoContext object available for accessing the IPublishedContent object from the content cache. The trick is to pass an UmbracoHelper object as an extra parameter to the GatheringNodeData event handler.

Typically, one defines the event handler method and assign it to the event like this:

protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
   var helper = new UmbracoHelper(UmbracoContext.Current);
   ExamineManager.Instance.IndexProviderCollection["ExternalIndexer"].GatheringNodeData
          += Indexer_GatheringNodeData;

private void Indexer_GatheringNodeData(object sender, IndexingNodeDataEventArgs e)
{
  var node = helper.TypedContent(e.NodeId);
} 

But you can pass an extra parameter to the event handler, like this:

protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
   var helper = new UmbracoHelper(UmbracoContext.Current);
   ExamineManager.Instance.IndexProviderCollection["ExternalIndexer"].GatheringNodeData
          += (sender, e) => Indexer_GatheringNodeData(sender, e, helper);
}

You can then access UmbracoHelper and use it to get an IPublishedContent object like this:

private void Indexer_GatheringNodeData(object sender, IndexingNodeDataEventArgs e, UmbracoHelper helper)
{
  var node = helper.TypedContent(e.NodeId);
} 

While I've used this to get IPublishedContent, one caveat is that the UmbracoContext (used in creating the UmbracoHelper object) does not seem to be fully initialized. As a result, I've run into NullReferenceExceptions when calling Vorto's GetVortoValue() extension method. The workaround I found at https://gist.github.com/sniffdk/7600822 is to 'fake' an UmbracoContext. Also, it should be noted that IPublishedContent is only for published content.