We don't have your data nor the knowledge about your tables. Because of this it's impossible t say what is logically wrong with the statements.
However, what you can do is to run the cursor statement and see what is duplicated. For example take the statement
Select Showroomcode,Stockno,Servicetag,Sum(Qty)as Qty
from
(
( Select H.showroomcode,H.Stockno,H.Servicetag,H.OP as Qty from HSR_OP_Bal H,
(Select showroomcode ,Stockno,Startdate from IMTable) I
where H.Showroomcode=I.Showroomcode and H.Stockno=I.Stockno
and I.Startdate='2015-09-01' )
union all
( select a.Showroomcode,a.Stockno,a.Servicetag,
(case when TransType in (1100,1300) then Qty*1
else Qty* -1
end ) as Qty from ConsIMEItrndata a,
(Select Showroomcode,Stockno,Startdate from IMTable) B
where A.Showroomcode=B.Showroomcode and A.Stockno=B.Stockno
and B.Startdate ='2015-09-01' and a.Transdate <'2015-09-01' ) )T
Group by Showroomcode,Stockno,Servicetag
and run it in SSMS. You can replace the columns with an asterisk so you would more easily see what data is repeated and what is different on each row. This helps you to see what causes the duplication. On probable cause is the UNION structure if the same data is returned from both sides of the UNION.