If the query with the multiple JOINs works for you, that is okay. Be careful with the LEFT JOIN which might result NULL. And also you need the same numbers of columns (7 for your example) between SELECT statement and FETCH INTO. Something like this:
DECLARE @Table1Col1 varchar(20);
DECLARE @Table1Col5 varchar(20); -- Not used
DECLARE @Table3Col1 varchar(20);
DECLARE @Table4Col1 varchar(20);
DECLARE @DATE_PAID date;
DECLARE @AMOUNT_PD money;
DECLARE @NAME varchar(20);
DECLARE c1 CURSOR FOR
SELECT t1.Col1, t1.Col5, temp.DATE_PAID, temp.AMOUNT_PD, temp.NAME, t3.Col1, t4.Col1
FROM Table1 AS t1
INNER JOIN #tempTable1 AS temp ON temp.PERMIT_INS = t1.Col2
LEFT OUTER JOIN Table3 AS t3 ON t1.Col1 = t3.Col2
LEFT OUTER JOIN TABLE4 AS t4 ON t3.Col1 = t4.Col2
OPEN c1
FETCH NEXT FROM c1 INTO @Table1Col1, @Table1Col5, @DATE_PAID, @AMOUNT_PD, @NAME, @Table3Col1, @Table4Col1;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Update Table3 ...
-- Update Table4 ...
FETCH NEXT FROM c1 INTO @Table1Col1, @Table1Col5, @DATE_PAID, @AMOUNT_PD, @NAME, @Table3Col1, @Table4Col1;
END
CLOSE c1;
DEALLOCATE c1;