I'm not sure about QGIS, but this is very common to do in Surfer. A good way to do this in Surfer is to have the river channel defined as polylines (or a polygon), and then use the polylines or polygon as breaklines when gridding the data in Surfer. You can then clip (blank) the grid outside the polygon to remove the data.
I think it's important to grid the data with the breaklines (not just clip it afterwards), because then the contours take this data into account. If you just grid the data and clip/blank, you could get contours going right into the river bank - which doesn't usually happen.
For example, in Surfer you can:
Get the river channel boundary polylines or polygon in BLN file format. You can either add an empty base layer, edit the layer, draw the river channel polylines, stop editing the layer and export the layer to a BLN file. Or, if you have the channel boundaries saved in another format already (e.g. SHP), you can load the SHP as a base map, turn off the axes, and export it back to a new BLN file.
Open the BLN file in the Surfer worksheet and add a column of Z values in Column C for all the XY points. This could be 0 (if the river bed level data is negative), or whatever value you want to assign to the river channel boundary. Save and close the file.
Click Grid | Data and grid the river bed level data. In the Grid Data dialog, click the Advanced Options button and on the Breaklines (or Faults and Breaklines) tab, load the BLN file as a breakline file.
Click OK to finish gridding the data. Gridding the data with breaklines is a great way to grid lake, river or coastline bathymetry.
If you want to remove the data outside the river channel, you can erase this. It would be easy in Surfer 16 (the current version) in the revamped Grid Editor. In Surfer 13 though, you could still do this using the Grid | Blank command. Convert the polylines defining the river channel into a single polygon (load as a base layer, edit base layer, select polylines and connect them into a single polygon, stop editing base layer, turn off axes and export to new BLN file). Open the BLN file in the Surfer worksheet and make sure cell B1 has a 0 in it (that’s the blanking flag value to tell Surfer to remove the data outside the polygon). Close and save the file. Then once you have the river channel defined as a polygon, you can use the Grid | Blank command in Surfer to blank the grid with the polygon. This will create a new blanked grid. It will only have the data inside the river channel.
I hope that helps!