3つ以上のチャンネルを持つラスタデータを表示する場合は、
3つのチャンネルを選んでRGBに割り振って表示したいところです。
QGIS本体では、読み込んだ後でProperty画面で選択することができます

ラスタデータのプロパティ画面
APIではどうなっているでしょうか。
ここではENVI Rasterデータの例を使いました。
def addRasterLayer(self):
file = QFileDialog.getOpenFileName(self, "Open ENVI Raster file", ".", "ENVI Raster(*.dat)")
fileInfo = QFileInfo(file)
layer = QgsRasterLayer(fileInfo.filePath(), fileInfo.completeBaseName())
if not layer.isValid():
return
# マルチバンド描画モードにセット
layer.setDrawingStyle(QgsRasterLayer.MultiBandColor)
# コントラストを自動的に最大値、最小値に設定
layer.setContrastEnhancementAlgorithm(QgsContrastEnhancement.StretchToMinimumMaximum, False)
# RGBに選択したチャンネルを割り当てる
# 割り当てはバンド名を使うので、このようにする
# バンド番号は1スタート
layer.setRedBandName(layer.bandName(21))
layer.setGreenBandName(layer.bandName(13))
layer.setBlueBandName(layer.bandName(7))
# あとは一緒
QgsMapLayerRegistry.instance().addMapLayer(layer);
self.canvas.setExtent(layer.extent())
cl = QgsMapCanvasLayer(layer)
self.layers.append(cl)
self.canvas.setLayerSet(self.layers)
ピクセル深度が8bit以上でもQgsContrastEnhancement.StretchToMinimumMaximum
を指定することで、ちゃんと表示してくれます。