I have all my log files accessible on the machine where Logstash is running and have been using the file input configuration of Logstash. Is there any functional difference is using this approach vs running File Beats on the same machine?
Not really.
Do the two share the same source code for reading from log files?
No.
What is the preferred approach?
Since the implementation is different there might be slightly different behavior in corner cases. Apart from that it's mostly up to what makes the most sense for you. If I use Filebeat for collecting a particular kind of log file on all servers I'd use Filebeat everywhere instead of making an exception for the Logstash server(s) which theoretically wouldn't have needed Filebeat.
The file input and Filebeat have slightly different tuning options too.