Liban Abdi Ali put Olhanense in front 13 minutes in when he finished off a counterattack.
Rodriguez leveled for Porto in the 43rd, and six minutes later he passed for fellow Colombia international Jackson Martinez to give the defending champions the lead for good.
Brazil striker Hulk made it 3-1 in the 72nd before Tiago Targino scored for the hosts four minutes before time.
Also, Joao Ribeiro netted in stoppage time to secure a 2-2 draw for Guimaraes with Estoril.
On Sunday, Benfica hosts Nacional, while Sporting Lisbon looks for its first win on Monday at Maritimo.