While having some more experience with the geoprocessors, I can suggest it's better to use an IGPProcess as the first argument of Execute(), the second arg is some default TrackCancel object that you first have to set up. So it's better to use the overloaded function with 2 arguments.
So it would look something like this (example with another tool)
STEPS:
1) Initalize tool object, set properties
Dim copyraster As New CopyRaster
With copyraster
.in_raster = inputpath
.out_rasterdataset = outputPath
.pixel_type = FrameworkConstants.RASTER_PIXEL_TYPE
End With
2) Intialize the Geoprocessor
Dim gp2 As ESRI.ArcGIS.Geoprocessor.Geoprocessor = New ESRI.ArcGIS.Geoprocessor.Geoprocessor()
gp2.OverwriteOutput = True
gp2.AddOutputsToMap = False
3) Create IGPProcess and TrackCancel object
Dim result2 As ESRI.ArcGIS.Geoprocessing.IGeoProcessorResult = Nothing
Dim pGPProcess2 As IGPProcess = DirectCast(copyraster, IGPProcess)
Dim pTrackCancel As ITrackCancel = GetDefaultCancelTracker()
4) Execute and cast to IGeProcessorResult
result2 = DirectCast(gp2.Execute(pGPProcess2, pTrackCancel), ESRI.ArcGIS.Geoprocessing.IGeoProcessorResult)
5) Check if object is filled and status is correct
If (result2 Is Nothing) OrElse (result2.Status <> esriJobStatus.esriJobSucceeded) Then
Throw New GeoProcessingException(GetFullToolName(copyraster), gp2)
End If
If this doesn't work, you could sail a slightly different course and use Map Algebra instead, I prefer using this if I want to do a raster calculation
Help: ArcObjects Help for .NET developers